Rails Union Table并按公共密钥排序

时间:2017-06-17 16:27:17

标签: ruby-on-rails ruby-on-rails-4

我在rails应用程序Match and Round中有两个模型如下

Match(id, team1, team2, series_id, event_time, event_lock_time, match_type, created_at, updated_at, match_no, match_stage)

Round(id, series_id, name, description, event_time, event_lock_time, team_ids, matches_count, created_at, updated_at)

我想基于created_at添加两个表和排序记录,如

events = (Match + Round).order('created_at desc').paginate(:page => params[:page], :per_page => params[:per_page])

并且还应用分页。我正在使用will paginations gem。

任何人都可以帮助我在活动记录中如何做到这一点。

1 个答案:

答案 0 :(得分:0)

只要我知道,模型没有+运算符。所以你不能这样做:

(Match + Round)

但您可以添加Active Record Relations:

matches = Match.all
rounds = Round.all
(matches + rounds).sort_by(&:created_at)

您必须使用sort_by或类似方式,因为(matches + rounds)是数组而不是活动记录关系(因此未定义order)。

<强>更新 我猜你使用will_paginate对结果进行分页。它仍然适用于数组,但你必须告诉它,你可以用两种方式告诉它:

  1. 将其添加到控制器的顶部:require 'will_paginate/array'
  2. 创建初始化程序 config / initializers / will_paginate_with_array.rb 并在此文件中包含它。
  3. 然后,你可以这样做:

    (matches + rounds).sort_by(&:created_at).paginate(:page => params[:page], , :per_page => params[:per_page])