Ecto:使用 has_many 关联对集合中的预加载数据进行排序

Ecto: Order preloaded data in collection with has_many association

假设我有这个用于获取所有线程:

Thread |> Thread.ordered |> Repo.all |> Repo.preload([:posts])

如何为 :posts 提供 order_by 子句?我似乎无法在文档中找到任何引用 Ecto.Repo.preload/1 的内容,因此所提供示例中的 none 似乎有助于弄清楚如何正确使用此语法。

Ecto.Query 模块使得将某些查询应用于预加载等事情变得非常容易。

我们实现这一点的方法是将查询传递给预加载函数,然后将预加载的结果限制为该查询。

例如,在您的情况下:

import Ecto.Query # => Needed to use the ecto query helpers

Thread 
|> Thread.ordered 
|> Repo.all 
|> Repo.preload([posts: (from p in Post, order_by: p.published_at)])

(假设您在帖子上发布了字段)