【问题标题】:Rails - merge two tables with identical structureRails - 合并两个具有相同结构的表
【发布时间】:2018-06-26 12:30:09
【问题描述】:

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

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

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

【问题讨论】:

  • 你可以使用sort_by:apidock.com/ruby/Enumerable/sort_by
  • @JagdeepSingh 是的,但是我无法对其进行分页,因为它是一个数组,而不是 activerecord 返回的对象
  • 它会抛出错误undefined method 'order' for #<Array:0x007f0338c02898,因为orderActiveRecord::QueryMethods 的一部分,因此您只能在ActiveRecord 实例上调用它
  • Google 或搜索 SO 以查找 UNION 或更改您的数据库结构以拥有一个 leagues 表。
  • 有人渴望一步一步地展示如何做到这一点吗?我找到了一些解决方案,但我不理解它们,所以我不知道如何针对这种特定情况定制它们

标签: ruby-on-rails activerecord model append


【解决方案1】:

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

我没有设法将这两个 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    相关资源
    最近更新 更多