2010-07-01 42 views

回答

3

什麼

named_scope :in_gallery, :conditions => ["gallery IS NOT NULL AND gallery != ''"] 

2

我認爲J的命名範圍定義看起來是正確的,但除此之外,我會質疑爲什麼你使用NULL和空字符串表示「不在畫廊」。如果你可以控制所有對這個數據庫的插入和更新,我建議選擇一個或另一個(NULL對我來說更自然),並堅持使用它。它會簡化你的代碼,比如說,這個命名範圍,如果你忘記檢查一個或者另一個,這兩個都會導致一些非常令人討厭的bug。

實現此目的的一個簡單方法是添加驗證以禁止將庫設置爲空字符串,然後修復任何間歇(希望您有測試)。如果你公開一個API並且需要允許空畫廊向後兼容,你可以設置一個before_save鉤子來將空字符串改爲零。

0

下面的蓋子都沒有空,不爲空:

named_scope :in_gallery, :conditions => ["gallery <> ''"] 

或者在軌3+你可以這樣做:

scope :in_gallery, where("gallery <> ''") 
相關問題