按相关模型中的列排序

时间:2015-07-07 20:54:29

标签: ruby-on-rails model-associations

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

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

Chats has_many messagesMessage belongs_to chat

从我的控制器中,我想获得一个聊天列表,按相关消息的created_at排序。首先,例如:

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

或类似的东西。

我的问题是,如何通过这种关系从相关模型中实现这种排序?所有的贡献都表示赞赏。

3 个答案:

答案 0 :(得分:0)

还要添加.references(:messages)

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

答案 1 :(得分:0)

您可以在关联中定义订单。请尝试以下方法:

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

因此,当您致电chat.messages时,它将返回具有给定订单的消息。

答案 2 :(得分:0)

谢谢大家,@ Rubyrider和@Andrew。我已经能够按以下顺序订购列:

sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7

没有在邮件中包含@chats = current_user.chats.includes(:messages).order("messages.created_at desc").paginate(page: params[:page]) .first。令人惊讶的是,我没有必要指定聊天的哪些消息用于排序。我想.last会自动查看,只需使用最新的相关模型进行排序。