Elixir 预加载关联和分页
我的Elixir 预加载关联和分页,elixir,phoenix-framework,Elixir,Phoenix Framework,我的PersonController中有一个show操作,即: person = Repo.get_by(Person, nick: params["nick"]) page = Message |> where([m], m.person_id == ^person.id) |> where([m], m.hidden == false) |> order_by([m], desc: m.created_at) |> Repo.preload(:channel) |&g
PersonController
中有一个show
操作,即:
person = Repo.get_by(Person, nick: params["nick"])
page = Message
|> where([m], m.person_id == ^person.id)
|> where([m], m.hidden == false)
|> order_by([m], desc: m.created_at)
|> Repo.preload(:channel)
|> Repo.paginate(page: params["page"], page_size: 250)
paginate
方法来自Scrivener包
使用那里的Repo.preload
行,我得到以下错误:
key :__meta__ not found in: #Ecto.Query<from m in Logs.Message, where: m.person_id == ^34424, where: m.hidden == false, order_by: [desc: m.created_at]>
一个人在一天内可以发送消息的频道可能会有所不同,因此我想预先加载这些频道。如何执行此操作?
Repo.preload
希望收到模型或模型列表。看起来您正在向其传递一个查询。有两种解决方案:
Repo.paginate
之后移动Repo.preload
——此时我们正在使用模型(我假设Repo.paginate
执行查询,我并不直接熟悉它)Repo.preload
更改为exto.Query.preload
——后者转换查询并将有关预加载的信息直接插入到生成的查询中只是想添加一个链接,指向exto.Query.preload/3和exto.Repo.preload/2的文档
<a href='/<%= @message.channel.name %>?date=<%= date %>#<%= @message.id %>'>
[<%= @message.created_at |> Calendar.Strftime.strftime!("%H:%M:%S") %>]
</a>