2017-03-25 24 views
3

類似のエンティティのグループを挿入し、それぞれのIDを1つずつ取得したいと思います。ループの結果を変数のリストに保存する

q1 = "question1" 
q2 = "question2" 
q3 = "question3" 
q4 = "question4" 

Enum.each([q1, q2, q3, q4], &(Repo.insert!(......))) 

# working with q1 and id of q1 
# ....... 


# working with q2 and id of q2 
# ....... 

# and so on 

は、おそらく、私はRepo.insertによって返された結果、モデルを保存したい変数の第2のリストを作成するにはどのような方法があります:私はこれをしようとしていますか? そうでなければ、挿入された各モデルの "id"にどうやってアクセスすればよいでしょうか?q1-q4? 代わりに、代わりに1つずつ挿入する必要がありますが、それは簡単で簡単ですか?あなたがEnum.map/2を探している

答えて

1

ids = [q1, q2, q3, q4] 
|> Enum.map(&Repo.insert!(......)) 
|> Enum.map(&Map.get(&1, :id)) 

また手順で行うことができます。

structs = Enum.map([q1, q2, q3, q4], &Repo.insert!(......)) 
ids  = Enum.map(ids, &Map.get(&1, :id)) 
+0

はいが、再割り当ての変数はグーありませんd。 – Kuqa

+0

なぜですか?しかし、そうしたくない場合は、同じメソッドを使用して、挿入された構造体を含むタプルとIDを返すことができます。 – Sheharyar

+0

待って、ここに再割り当てはありませんよね? – Kuqa

1

これを行うには多くの方法があります。一つは、別のIDのリストを作成し、Enum.zip/2を使用してリストの両方を反復処理することです:

q1 = "question1" 
q2 = "question2" 
q3 = "question3" 
q4 = "question4" 

ids = Enum.map([q1, q2, q3, q4], &(Repo.insert!(......))) 

for {q, id} <- Enum.zip([q1, q2, q3, q4], ids) do 
    IO.inspect {q, id} 
end 

もう一つは、(私はいくつかの明確なコードについてはこちらをforを使用していますが、あなたができるEnum.mapから質問/ IDのペアを返すことです)ならびにEnum.map/2を使用し:そして

pairs = for q <- [q1, q2, q3, q4] do 
    {q, Repo.insert!(...)} 
end 

同様に反復:

for {q, id} <- pairs do 
    IO.inspect {q, id} 
end 
関連する問題