2013-05-01 42 views
0

我有一個rails範圍語句,我想要2 where子句。 (當我完成它的工作時,我會清理硬編碼)。Rails範圍與2 where子句

這是在我的工作單模型:

scope :laborok, where("wostatus_id NOT IN (?)", [231, 230, 8466, 8467, 232]) and where("maxsynch = (?)", "N") 

的邏輯是,如果工作單狀態(wostatus.id)不是一個上的值和workorder.maxsynch等於「N」

回答

3

你可以鏈,其中()方法:

scope :laborok, where("wostatus_id NOT IN (?)", [1]).where("maxsynch = (?)", "N") 

豔記了,我換成你的ID陣列[1]! 這裏是你的ID的數組代碼:

scope :laborok, where("wostatus_id NOT IN (?)", [231, 230, 8466, 8467, 232]). 
        where("maxsynch = (?)", "N") 
+0

謝謝 - 它工作的很棒! – Reddirt 2013-05-01 17:27:54

+0

我喜歡鏈接 - 它對我來說更具可讀性。 – Reddirt 2013-05-01 17:28:57

0

什麼投入字符串被簡單地跟着你的數據庫適配器過去了,在取代的參數值,因此,最簡單的形式是隻使用AND關鍵字:

scope :laborok, where(["wostatus_id NOT IN (?) AND maxsynch = (?)", [231, 230, 8466, 8467, 232], "N"]) 

使用多個?where串,第一個參數是傳遞到您的DB適配器字符串,而後續的參數代入的字符串,所提供的順序。

鏈接的作品好,以及如果它在你的具體情況更具可讀性:

scope :laborok, where("wostatus_id NOT IN (?)", [231, 230, 8466, 8467, 232]). 
       where("maxsynch = (?)", "N") 

許多ActiveRecord Query Interface methods可以以這種方式進行鏈接。

1

爲什麼鏈接?

class Workorder < ActiveRecord::Base 
    scope :laborok, lambda do |ids, maxsynch| 
     where("wostatus_id NOT IN (?) AND maxsynch = ?", ids, maxsynch) 
    end 
end