2017-04-21 105 views
0

我創建的模型的方法基於以下Rails的最佳實踐模型

SELECT TOP 1 Column1 
FROM vSomeView 
WHERE vSomeView.ColumnID = @column_id 
AND Column2 = 'Abc' 
AND Column3 = 'Def' 

SQL查詢我創建了這個方法,但想知道什麼是最好的做法在SQL查詢創建方法在哪裏有條件。應該在哪些條件在範圍內或者他們應該在方法中?

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

這取決於如果像的範圍:

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

可以獨立使用。即調用Klass.column2scope獲取所有匹配記錄是否有用?一個真實的例子會是這樣的:

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

現在我們可以調用Product.expired來查找舊產品。或者將其結合到查詢Product.expired.where(department :: food)中。

如果查詢始終是整件事情在一起,你可能只是把它放在一起的方法。