我正在尝试创建一个ActiveRecord查询,该查询将按相关模型中某个列的值对结果进行排序:
我有一个与消息模型有one to many
关系的聊天模型。
Chats has_many messages
和Message belongs_to chat
从我的控制器中,我想获得一个聊天列表,按相关消息的created_at
排序。首先,例如:
@chats = current_user.chats.includes(:messages).order("messages.first.created_at").paginate(page: params[:page])
或类似的东西。
我的问题是,如何通过这种关系从相关模型中实现这种排序?所有的贡献都表示赞赏。
答案 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
会自动查看,只需使用最新的相关模型进行排序。