Rails-合并具有相同结构的两个表

时间:2018-06-26 12:30:10

标签: ruby-on-rails activerecord model append

在我的模型中,我有两个具有相同结构的表:

League1
id  other_columns  match_starts_at  main_page
----------------------------------------------
1   xxxxxxxxxxxxx  24/06/2018       1
2   xxxxxxxxxxxxx  26/06/2018       1

League2
id  other_columns  match_starts_at  main_page
----------------------------------------------
1   xxxxxxxxxxxxx  23/06/2018       1
2   xxxxxxxxxxxxx  25/06/2018       1

我的控制器执行以下操作:

league1 = League1.where(main_page: 1)
leageu2 = League2.where(main_page : 1)

如何将两个联赛中的记录混合(添加,合并或其他任何英语单词)合并为一个对象,以便以后可以通过match_starts_at对其进行排序?

类似这样的东西:

@leagues = league1 + league2
@leagues.order(match_starts_at: :desc)

但是会导致错误: undefined method 'order' for #<Array:0x007f0338c02898>

我想要的结果是这样(按match_starts_by排序):

League2
id  other_columns  match_starts_at  main_page
----------------------------------------------
1   xxxxxxxxxxxxx  23/06/2018       1
1   xxxxxxxxxxxxx  24/06/2018       1
2   xxxxxxxxxxxxx  25/06/2018       1
2   xxxxxxxxxxxxx  25/06/2018       1

然后我将其分页并发送到我的视图。

1 个答案:

答案 0 :(得分:0)

我现在可以回答自己的问题。

我没有设法将这两个ActiveRecord::Relation对象合并为一个对象,但是事实证明,在输出上包含Array也足够了。

我做了什么:

league1 = League1.where(main_page: 1) #ActiveRecord::Relation
leageu2 = League2.where(main_page : 1) #ActiveRecord::Relation

@leagues = league1 + league2 #which returns Array

@league = @league.sort_by { |r| r.match_starts_at }.reverse #sorting a normal array

@league = Kaminari.paginate_array(@league).page(params[:page]).per(10) # it turned out Kaminari can also paginate Array using #paginate_array