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

Nic*_*ick 1 activerecord ruby-on-rails-3

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

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

模型:

class Quality < ActiveRecord::Base
...
def passed_inspection
   [code that calculates based on values in model]
end
Run Code Online (Sandbox Code Playgroud)

控制器:

@records = Quality.where('passed_inspection = true')
Run Code Online (Sandbox Code Playgroud)

视图:

Did pass inspection?: <%= record.passed_inspection %>
Run Code Online (Sandbox Code Playgroud)

cod*_*tes 7

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

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
Run Code Online (Sandbox Code Playgroud)

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

@records = Quality.passed
Run Code Online (Sandbox Code Playgroud)

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

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