合并两个ActiveRecord结果并按共享联接表属性排序

时间:2017-11-09 19:48:25

标签: ruby-on-rails ruby sorting activerecord ruby-on-rails-5

我有一个do { Scanner in = new Scanner(System.in); String userInput = "Input your number: "; System.out.println(userInput); } while (in.hasNextInt() || in.hasNextDouble()); 表和一个Convo表,它们都与GroupMeeting表相关联。

我想找到current_user包含带有msgs的convos或group_meetings的所有实例,将两者合并,然后按照最后一个msg.created_at的顺序一起显示给用户

我在这里定义了两个:

Msg

然后将它们组合在一起:

@convos = Convo.includes(:msgs).where("sender_id = ? OR recipient_id = ?", current_user, current_user).where.not(:msgs => { :id => nil }).merge(Msg.order(created_at: :desc))
@group_meetings = current_user.group_meetings.includes(:msgs).where.not(:msgs => { :id => nil }).merge(Msg.order(created_at: :desc))

我无法弄清楚现在如何通过msg.created_at

对它们进行排序

我尝试了以下内容:

  @convos = @convos + @group_meetings

这些似乎都是服务器端排序。在创建数组后,如何根据连接表对这些进行排序?

如果我需要提供任何其他详细信息,请告诉我。谢谢!!

1 个答案:

答案 0 :(得分:1)

您可以尝试以下操作:

(@convos + @group_meetings).sort_by { |item| item.msgs.minimum(:created_at) }