我只想查找非空或空/空的記錄,目前有;named_scope - 查找字段既不爲空也不爲空/空白的條目
named_scope :in_gallery, :conditions => ["gallery IS NOT NULL"]
(庫是一個字符串),但如果用戶輸入然後刪除一個標題然後這個空字符串被包括在結果中。
澄清我希望能夠選擇只在該領域具有一定的文字條目...
我只想查找非空或空/空的記錄,目前有;named_scope - 查找字段既不爲空也不爲空/空白的條目
named_scope :in_gallery, :conditions => ["gallery IS NOT NULL"]
(庫是一個字符串),但如果用戶輸入然後刪除一個標題然後這個空字符串被包括在結果中。
澄清我希望能夠選擇只在該領域具有一定的文字條目...
什麼
named_scope :in_gallery, :conditions => ["gallery IS NOT NULL AND gallery != ''"]
?
我認爲J的命名範圍定義看起來是正確的,但除此之外,我會質疑爲什麼你使用NULL和空字符串表示「不在畫廊」。如果你可以控制所有對這個數據庫的插入和更新,我建議選擇一個或另一個(NULL對我來說更自然),並堅持使用它。它會簡化你的代碼,比如說,這個命名範圍,如果你忘記檢查一個或者另一個,這兩個都會導致一些非常令人討厭的bug。
實現此目的的一個簡單方法是添加驗證以禁止將庫設置爲空字符串,然後修復任何間歇(希望您有測試)。如果你公開一個API並且需要允許空畫廊向後兼容,你可以設置一個before_save鉤子來將空字符串改爲零。
下面的蓋子都沒有空,不爲空:
named_scope :in_gallery, :conditions => ["gallery <> ''"]
或者在軌3+你可以這樣做:
scope :in_gallery, where("gallery <> ''")