首先,我使用Rails v3.2.9和Squeel 1.0.13,以下是我想要做的:使用Squeel時,您可以在有條件的地方添加子句嗎?
我想要使用三種標識信息中的任何一種來搜索客戶端 - 名稱,出生日期(dob)和社會保險號碼(罪惡)。結果集必須包含任何具有任何標識符的記錄 - 條件的OR。我之前在Squeel做過這件事,它看起來像這樣:
scope :by_any, ->(sin, name, dob){ where{(client.sin == "#{sin}") | (client.name =~ "%#{name}%") | (client.dob == "#{dob}")} }
只要我提供所有的標識符,這工作正常。但是如果我只有一個名字呢?以上範圍的結果:
SELECT "clients".* FROM "clients" WHERE ((("clients"."sin" IS NULL OR "clients"."name" ILIKE '%John Doe%') OR "clients"."dob" IS NULL))
這包括組客戶端罪在那裏是空和客戶端組,其中DOB是與像「李四」的名稱所要求的一組客戶端沿空。
因此,請輸入我的嘗試,以有條件地向where
塊添加子句。起初,我試圖檢查使用零的值?方法:
def self.by_any (sin, name, dob)
where do
(clients.sin == "#{sin}" unless sin.nil?) |
(clients.name =~ "%#{name}" unless name.nil?) |
(clients.dob == "#{dob}" unless dob.nil?)
end
導致:
SELECT "clients".* FROM "clients" WHERE ('t')
提出許多其他問題一樣,這是怎麼回事與「T」,但是這是一個切線。
爲每個排列寫入where子句的缺點,有沒有一種方法可以有條件地添加子句?
更漂亮,我實際上想出了。從這裏偷了一下[鏈接](http://stackoverflow.com/questions/8045823/how-do-i-write-a-union-chain-with-activerelation)拿出我的答案,但我想我喜歡你更好。我將不得不緊湊和減少。 – erroric
感謝您對「減少」的解釋 - 我將來會再次使用它。 – erroric
我得到一個「語法錯誤,意想不到的modifier_if,期待']'」在數組創建循環中的if語句之前?任何指針讚賞。 – Conor