代码之家  ›  专栏  ›  技术社区  ›  Maciej Dobosz

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

  •  1
  • Maciej Dobosz  · 技术社区  · 8 年前

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

    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>

    我想要的结果是(按匹配开始排序):

    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 回复  |  直到 8 年前
        1
  •  0
  •   Maciej Dobosz    8 年前

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

    我没能把这两个合并起来 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
    
    推荐文章