Rails最佳实践在模型中的sql查询上创建方法

时间:2017-04-21 01:50:22

标签: ruby ruby-on-rails-4

我正在基于下面的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

1 个答案:

答案 0 :(得分:0)

这取决于范围如:

scope :column2scope, -> { where(column2: 'Abc') }

可以单独使用。即,调用Klass.column2scope获取所有匹配的记录是否有用?一个真实的例子就是:

scope :expired, -> { where('created_at < ?', 1.year.ago) }

现在我们可以调用Product.expired来查找旧产品。或者将它组合在查询Product.expired.where(department :: food)。

如果查询总是在一起,那么你也可以把它放在一个方法中。