按关联模型中的列排序
Ordering by a column in an associated model
我正在尝试创建一个 ActiveRecord 查询,该查询将根据关联模型中其中一列的值对结果进行排序:
我有一个与消息模型有 one to many
关系的聊天模型。
Chats has_many messages
和 Message 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
会自动查找并只使用最新的关联模型来进行排序。
我正在尝试创建一个 ActiveRecord 查询,该查询将根据关联模型中其中一列的值对结果进行排序:
我有一个与消息模型有 one to many
关系的聊天模型。
Chats has_many messages
和 Message 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
会自动查找并只使用最新的关联模型来进行排序。