如何组合ActiveRecord对象?

Jes*_*ess 8 ruby activerecord ruby-on-rails

我想知道是否有一种有效的方法来组合Rails中多个ActiveRecord对象的结果.例如,我可能会对三个单独的表进行三次单独调用,并且我希望将结果组合在一起,并按公共列进行排序.

这是一个超级基本的代码示例,希望能让我的问题更容易理解:

@results1 = Table1.find(:all)  
@results2 = Table2.find(:all)  
@results3 = Table3.find(:all)  

@combined_results_sorted_by_date_column = (how?)
Run Code Online (Sandbox Code Playgroud)

正如其他人所建议的,这是问题的一个解决方案.

@combined_results = @result1 + @result2 + @result3
@combined_results.sort! {|x,y| x.date <=> y.date}
Run Code Online (Sandbox Code Playgroud)

如果我想按日期排序,但Table3将"created_on"列作为日期引用,该怎么办?

Lar*_*eth 14

@results1 = Table1.find(:all)
@results2 = Table2.find(:all)
@results3 = Table3.find(:all)

@combined_results_sorted_by_date_column =
   (@results1 + @results2 + @results3).sort_by(&:date)
Run Code Online (Sandbox Code Playgroud)

如果我想按日期排序,但Table3将"created_on"列作为日期引用,该怎么办?

class Table3
  alias_method :date, :created_on
end
Run Code Online (Sandbox Code Playgroud)

或者干脆

class Table3
  alias date created_on
end
Run Code Online (Sandbox Code Playgroud)


Car*_*ima 2

您使用的不是“表”,而是对象。

如果你这样想的话,那就没有意义了:

@results1 = Users.find(:all)
@results2 = Posts.find(:all)
@results3 = Comments.find(:all)
Run Code Online (Sandbox Code Playgroud)

它的“组合”形式意味着什么?

您可能想要的是使用不同的“查询”组合来自同类的结果。是这样吗?