按关联模型中的列排序

Ordering by a column in an associated model

我正在尝试创建一个 ActiveRecord 查询,该查询将根据关联模型中其中一列的值对结果进行排序:

我有一个与消息模型有 one to many 关系的聊天模型。

Chats has_many messagesMessage belongs_to chat

我想从我的控制器获取聊天列表,按关联 message.first 的 created_at 排序,例如:

@chats = current_user.chats.includes(:messages).order("messages.first.created_at").paginate(page: params[:page])

或类似的东西。

我的问题是如何从具有这种关系的关联模型实现这种排序?感谢所有贡献。

同时添加 .references(:messages)

这会将消息作为连接而不是单独的查询拉入。

您可以在您的协会中定义您的订单。尝试以下操作:

has_many messages, -> { order(:created_at => :asc) }
# change how you need

因此,当您调用 chat.messages 时,它会 return 给定顺序的消息。

谢谢大家,@Rubyrider 和@Andrew。我已经能够按如下方式对列进行排序:

@chats = current_user.chats.includes(:messages).order("messages.created_at desc").paginate(page: params[:page])

消息中不包含 .first.last。令人惊讶的是,我不必指定要使用聊天消息中的哪条进行订购。我想 ActiveRecord 会自动查找并只使用最新的关联模型来进行排序。