我想插入一组类似的实体,并一举得到每个实体的id。我试过这个:
class SharedState {
heading = '';
... other shared items ...
}
有没有办法可以创建第二个变量列表,我会存储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
返回的结果模型?
如果没有,那么我将如何访问" id"每个插入的模型:q1-q4?
或者我应该逐个插入它们,它会更容易,更直接吗?
答案 0 :(得分:1)
您正在寻找Enum.map/2
:
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))
答案 1 :(得分: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
另一种方法是从Enum.map
返回问题/ ID对(我在这里使用for
获取更清晰的代码,但您也可以使用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