Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 预加载关联和分页_Elixir_Phoenix Framework - Fatal编程技术网

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>