Rails 3,模型方法/计算属性

时间:2012-03-05 18:01:12

标签: ruby-on-rails-3 activerecord

我正在处理大量计算,以使模型中的各种值变为简单的TRUE或FALSE。问题是,这些计算非常激烈,而不是我想创建一个很长的,难以遵循的SQL语句。我宁愿在模型可以在返回记录时检查的方法中进行整个计算。

我已经尝试了很多方法来实现这一目标,在查找其他类似功能时,其他人将像我这样的新手推送到可能用于大多数目的但不会服务于我的SQL,因为正在进行的计算在某种程度上是模型外部的。

型号:

class Quality < ActiveRecord::Base
...
def passed_inspection
   [code that calculates based on values in model]
end

控制器:

@records = Quality.where('passed_inspection = true')

查看:

Did pass inspection?: <%= record.passed_inspection %>

1 个答案:

答案 0 :(得分:7)

听起来问题的解决方案是使用范围类方法来帮助清理模型。基本上你会像这样设置你的模型:

class Quality < ActiveRecord::Base
    def self.passed_inspection
        # Code that does your calculations
    end

    scope :passed, passed_inspection() # This needs to be below the function above
end

然后你可以像这样调用它来获取这些数据

@records = Quality.passed

如果您需要更多信息,可以使用此问题:RailsCast #215 Advanced Queries

编辑:修正了一些可怕的语法