現在私が持っている、null または空/空白ではないレコードのみを見つけたいです。
named_scope :in_gallery, :conditions => ["gallery IS NOT NULL"]
(ギャラリーは文字列です) しかし、ユーザーがタイトルを入力して削除すると、この空の文字列が結果に含まれます。
明確にするために、フィールドにテキストがあるエントリのみを選択できるようにしたい...
現在私が持っている、null または空/空白ではないレコードのみを見つけたいです。
named_scope :in_gallery, :conditions => ["gallery IS NOT NULL"]
(ギャラリーは文字列です) しかし、ユーザーがタイトルを入力して削除すると、この空の文字列が結果に含まれます。
明確にするために、フィールドにテキストがあるエントリのみを選択できるようにしたい...
どうですか
named_scope :in_gallery, :conditions => ["gallery IS NOT NULL AND gallery != ''"]
?
J の名前付きスコープの定義は正しいと思いますが、それ以上に、「ギャラリーにない」という意味で NULL と空の文字列の両方を使用している理由を疑問に思います。このデータベースへのすべての挿入と更新を制御できる場合は、どちらかを選択して (私には NULL の方が自然に思えます)、そのままにしておくことをお勧めします。たとえば、この名前付きスコープのような場所でコードを簡素化します。両方を許可すると、どちらかをチェックするのを忘れると、本当に厄介なバグが発生する可能性があります。
これを実装する簡単な方法は、検証を追加してギャラリーを空の文字列に設定することを禁止し、壊れたものを修正することです (できればテストがあることを願っています)。API を公開していて、下位互換性のために空のギャラリーを許可する必要がある場合は、before_save フックを設定して空の文字列を nil に変更できます。
以下は、null でないことと空でないことの両方をカバーしています。
named_scope :in_gallery, :conditions => ["gallery <> ''"]
またはRails 3+では次のことができます:
scope :in_gallery, where("gallery <> ''")