我正在基于下面的sql查询在模型中创建一个方法
SELECT TOP 1 Column1
FROM vSomeView
WHERE vSomeView.ColumnID = @column_id
AND Column2 = 'Abc'
AND Column3 = 'Def'
我为此创建了方法,但想知道在哪里有条件的最佳实践。如果所有条件都在范围内,或者它们应该在方法中吗?
class Abc
class Def < ActiveRecord::Base
self.table_name = 'vSomeView'
scope :column2scope, -> { where(column2: 'Abc') }
scope :column3scope, -> { where(column3: 'Def') }
def self.some_method(column_id)
Def
.select('vSomeView.column1')
.where("vSomeView.ColumnID = #{column_id}")
.first
end
end
end
答案 0 :(得分:0)
这取决于范围如:
scope :column2scope, -> { where(column2: 'Abc') }
可以单独使用。即,调用Klass.column2scope获取所有匹配的记录是否有用?一个真实的例子就是:
scope :expired, -> { where('created_at < ?', 1.year.ago) }
现在我们可以调用Product.expired来查找旧产品。或者将它组合在查询Product.expired.where(department :: food)。
中如果查询总是在一起,那么你也可以把它放在一个方法中。