【问题标题】:Ruby on Rails: Instantiate associated models with find_by_sql?Ruby on Rails:使用 find_by_sql 实例化关联模型?
【发布时间】:2011-01-23 23:39:09
【问题描述】:
【问题讨论】:
标签:
ruby-on-rails
select
include
find
find-by-sql
【解决方案1】:
您是否考虑过为数据库视图创建模型?例如:
-
使用复杂的 SQL 查询创建数据库视图:
CREATE VIEW production_plan_items AS
SELECT * FROM [...]
INNER JOIN [...];
-
为此视图创建模型:
# app/view_model.rb
class ViewModel < ActiveRecord::Base
self.abstract_class = true
def readonly?
true
end
def before_destroy
raise ActiveRecord::ReadOnlyRecord
end
end
# app/models/logical/production_plan_item.rb
module Logical
class ProductionPlanItem < ::ViewModel
end
end
-
一如既往地使用,但请记住这些记录是只读的!
Logical::ProductionPlanItem.where( ... )
如果将来性能仍然是一个问题,您可以使用触发器和存储过程非常轻松地将 DB 视图转换为物化视图。这将为您的应用程序带来巨大的速度提升,您甚至无需更改任何 Rails 代码。
Enterprise Rails 强烈推荐阅读:
http://www.amazon.com/Enterprise-Rails-Dan-Chak/dp/0596515200/ref=sr_1_1?ie=UTF8&qid=1293140116&sr=8-1