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"这样的公共字段排序).
是否可以从两个模型中进行查找/查询?或者,我可以执行两个查找并合并生成的数组,以便对它们进行排序吗?我可以使用一些中间模型来合并它们吗?
最简单的解决方案就是合并数组,然后只使用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
后两种解决方案很棘手,所以如果你有一些非常具体的东西,我只会尝试它们.
| 归档时间: |
|
| 查看次数: |
1503 次 |
| 最近记录: |