如何将2个Rails模型混合到单个查找中?

Cal*_*eed 3 ruby activerecord ruby-on-rails

我有两个不相关的模型(在db意义上)但有一些共同的列(名称,电子邮件等).

Class Account < ActiveRecord::Base

end


Class LegacyAccount < ActiveRecord::Base

end
Run Code Online (Sandbox Code Playgroud)

由于各种原因,我无法将这些合并到单个模型中或进行STI.但我想要一个简单的视图,在一个漂亮的表中显示两个模型的所有记录(可能按照"name"这样的公共字段排序).

是否可以从两个模型中进行查找/查询?或者,我可以执行两个查找并合并生成的数组,以便对它们进行排序吗?我可以使用一些中间模型来合并它们吗?

Kar*_*arl 6

最简单的解决方案就是合并数组,然后只使用Array某种排序方法:

@accounts = (LegacyAccount.all + Account.all).sort{|x,y| x.name <=> y.name}
Run Code Online (Sandbox Code Playgroud)

您可以在Account模型中编写自定义查找方法,以便更轻松,这样您就可以调用Account.find_all或者其他东西.


使用SQL还有另一种可能的解决方案:

@accounts = Account.find_by_sql("SELECT * FROM accounts UNION SELECT * FROM legacy_accounts")
Run Code Online (Sandbox Code Playgroud)

这适用于纯SQL,但我不确定Rails.我的猜测是它会将所有LegacyAccounts视为普通帐户.我不确定如果LegacyAccounts具有Accounts还没有的列,会发生什么.

或者你也可以尝试这里的东西:http: //api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/DatabaseStatements.html

后两种解决方案很棘手,所以如果你有一些非常具体的东西,我只会尝试它们.