對於基本條件(如find語句)和更一般的where子句,用戶都有能力查找任何一組條件。例如:Rails條件,如何解決從陣列中刪除nils的問題?
User.find_by_name(["One", "Two", "Three"])
User.find_by_name_and_age(["One", "Two"],[1,2,3])
或
User.where(:bonus_id => [1,2,3])
他們是這裏的輕微inconsistance,雖然。如果你使用
User.find_by_bonus_id([nil,1,2])
這將返回使用與獎金ID爲「無」,正如所料!但是,「find_by _... 和 ...」格式和「where」格式都不能以這種方式工作。
User.where(:bonus_id => [nil,1])
只會返回那些用戶提供的1
User.where(:bonus_id => [nil]
一個bonus_id將返回全無!
User.where(:bonus_id => nil)
但是,工作正常。
據我所知,where子句(和find_by_and方法)摺疊它們的數組,刪除任何非真值的值。這對我來說是一個非常重要的問題。
有沒有人知道一種方法來將nils包含在where子句數組(或解決方法)中,還是我將不得不最終加入多個查詢以獲得正確的行爲?
其他注意事項:
- 版本3.0.11
- 尼爾斯實際上並沒有被丟棄,而是在某些情況下它是在(NULL)比較,而不是在SQL NULL。我現在離開標題,因爲即使它不準確,遇到問題時也會出現問題。
軌道版本?在3.2.0'find_all_by_xyz'和'where'的工作方式完全相同(如你所期望的,'nil'包含在內) – tokland
3.0.11。這可能是因爲這不是預期的行爲,而且它已經被修復了。 – GlyphGryph
什麼'User.where(:bonus_id => [nil,1])。to_sql'在3.0.11中說?我只有3.2便利,並且正確地將WHERE子句中的'nil'分割成單獨的或x爲空的塊。 –