私はDRY Elixirを書こうとしていますが、Dave Thomasの本はまだ投稿中です!変数を使用する構造
以下はCard
のために自動生成されたPhoenixコントローラの一部です。実際には、Card
とまったく同じように動作するさまざまな製品がありますので、私は一般化したいと思います。私の努力の1つは下にありますが、エラーは** {} **でコンパイルされません。
私は言語に慣れていないので、私は基本的な間違いを犯していると確信しています(しかし、関数型プログラミングではありません)。あなたはこれで私を助けることができる場合
alias Api.Card
map = %{"cards" => Card, "books" => Book}
def create(conn, %{"product" => product}) do
# changeset = Card.changeset(%Card{}, card_params)
changeset = map[product].changeset(%map[product]**{}**, card_params)
case Repo.insert(changeset) do
{:ok, product} ->
conn
|> put_status(:created)
|> put_resp_header("location", card_path(conn, :show, card))
# |> render("show.json", card: card)
|> render("new_key.json", id: product.id)
は、私も同様に変数に
card_path
を有効にする必要があることに注意してください、私はそれが
estimate_path product
のラインに沿ったものになると思います。
は私もこれを試してみましたが、成功しなかったとしても
(Struct, path) =
case product do
"cards" -> (Card, card_path)
_ -> (Card, card_path)
end
ありがとうございます。最初のビットがうまくいきました。私はあなたも後者について正しいと確信しています。しかし、そのために、私はPhoenixを使用しており、 'resources/estimates /:product"、EstimateControllerを持っています:[:new、:edit] 'のように' estimate_path'で遊ぶ方法があるのか疑問に思っていましたか? –
これは熟語ですか?今のところ私は 'map'を' create'の中に使うことができますが、私は他の関数にも必要です。 –
マップを格納するためにモジュール属性を使うべきです。モジュール内で '@map%{...}'を使って定義し、関数内で '@ map 'を使ってアクセスしてください。 – Dogbert