0

現在私が持っている、null または空/空白ではないレコードのみを見つけたいです。

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

(ギャラリーは文字列です) しかし、ユーザーがタイトルを入力して削除すると、この空の文字列が結果に含まれます。

明確にするために、フィールドにテキストがあるエントリのみを選択できるようにしたい...

4

3 に答える 3

3

どうですか

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

?

于 2010-07-01T14:14:40.177 に答える
2

J の名前付きスコープの定義は正しいと思いますが、それ以上に、「ギャラリーにない」という意味で NULL と空の文字列の両方を使用している理由を疑問に思います。このデータベースへのすべての挿入と更新を制御できる場合は、どちらかを選択して (私には NULL の方が自然に思えます)、そのままにしておくことをお勧めします。たとえば、この名前付きスコープのような場所でコードを簡素化します。両方を許可すると、どちらかをチェックするのを忘れると、本当に厄介なバグが発生する可能性があります。

これを実装する簡単な方法は、検証を追加してギャラリーを空の文字列に設定することを禁止し、壊れたものを修正することです (できればテストがあることを願っています)。API を公開していて、下位互換性のために空のギャラリーを許可する必要がある場合は、before_save フックを設定して空の文字列を nil に変更できます。

于 2010-07-01T14:29:55.843 に答える
0

以下は、null でないことと空でないことの両方をカバーしています。

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

またはRails 3+では次のことができます:

scope :in_gallery, where("gallery <> ''")
于 2013-09-17T16:43:38.680 に答える