这就是我要做的事情:
project =
Repo.get!(Project, id)
|> Repo.preload([rows: from(r in Row, order_by: r.index)] [images: from(i in Image, order_by: i.index)])
但是我收到了这个错误:
** (ArgumentError) the Access calls for keywords expect the key to be an atom, got: [images: #Ecto.Query<from i in Dreamhouse.Image, order_by: [asc: i.index]>]
有人知道我在这里做错了吗?
答案 0 :(得分:3)
我怀疑我能解释错误信息,但原因是:
[rows: from(...)] [images: from(...)]
不是有效的Elixir。检查:
[[foo: 42] [bar: 3.14]]
应该是:
[rows: from(...), images: from(...)]
答案 1 :(得分:3)
错误消息说,您正在尝试从关键字列表中获取元素,但是传递意外而不是原子。
例如,以下代码产生类似的错误:
keyword_list = [keyword: :argument]
keyword_list[unexpected: :structure]
所以问题在于这一行:
Repo.preload([rows: from(r in Row, order_by: r.index)] [images: from(i in Image, order_by: i.index)])
您可能希望提供一个关键字列表作为参数,其中包含您要预加载的所有关联:
Repo.preload([rows: from(r in Row, order_by: r.index), images: from(i in Image, order_by: i.index)])