加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Ruby on Rails:使用find_by_sql实例化相关模

发布时间:2020-12-17 02:26:41 所属栏目:百科 来源:网络整理
导读:显然,包含和选择不能同时在Rails查找查询中使用,并且已经反复标记为wontfix: http://dev.rubyonrails.org/ticket/7147 http://dev.rubyonrails.org/ticket/5371 这让我非常不方便,因为我想要使用的时间与我想要使用的时间完全相同 – 当每一点性能都很重要
显然,包含和选择不能同时在Rails查找查询中使用,并且已经反复标记为wontfix:
http://dev.rubyonrails.org/ticket/7147
http://dev.rubyonrails.org/ticket/5371

这让我非常不方便,因为我想要使用的时间与我想要使用的时间完全相同 – 当每一点性能都很重要时.

有没有办法解决这个问题,并使用find_by_sql或任何其他方法手动生成一个include-with-select组合?麻烦的是,我不知道有什么方法来模拟include的功能,它在内存中实例化模型来保存包含的相关模型,这样我就可以输入model1.associated_models并让它不再次访问数据库.

解决方法

您是否考虑过为数据库视图创建模型?例如:

>使用复杂的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( ... )

如果将来性能仍然存在问题,您可以使用触发器和存储过程轻松地将数据库视图转换为物化视图.这将为您的应用程序提供极大的速度提升,您甚至不必更改一行Rails代码.

强烈推荐使用Enterprise Rails阅读:
http://www.amazon.com/Enterprise-Rails-Dan-Chak/dp/0596515200/ref=sr_1_1?ie=UTF8&qid=1293140116&sr=8-1

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读