は、私には、以下の範囲があります。IS NOT NULLのためのRailsスコープで、空でも空でもないですか?
をしかし、私はまた、条件が言いたい「OR TEXT_VALUEが空ではない」(その旨のか何か)。
text_value
が空/空白の行は選択しません。
は、私には、以下の範囲があります。IS NOT NULLのためのRailsスコープで、空でも空でもないですか?
をしかし、私はまた、条件が言いたい「OR TEXT_VALUEが空ではない」(その旨のか何か)。
text_value
が空/空白の行は選択しません。
Erwinが指摘しているように、単純なtext_value <> ''
の比較がこの場合に機能します。レール4に
scope :comments, where("text_value <> ''")
(レール3 scope
-asならびにfind
、all
、等、よりもむしろオプションハッシュ例えば:conditions => ...
このクエリ構文を好む。後者はdeprecated in Rails 3.1である。)
、第二引数ではなく、ラムダのようになります。
scope :comments, ->{ where("text_value <> ''") }
text_value <> ''
を使用すると、との両方を効率的にカバーできます。
でもempty
でもないtext_value
の場合は、TRUE
になります。
scope :comments, where("text_value <> ''")
ORは間違った演算子です。これは空の 'text_value'を受け入れます。 –
ええ、空TEXT_VALUEもNOT NULLである;) - それが修正だ、感謝 – maprihoda
は今、それは正しいです。しかし、追加のテスト 'text_value IS NOT NULL'は必要ありません。私の答えと他のコメントを参照してください。演算子 '<>'と '!='は文字型(およびほとんどの他の型も同じ)です。 –
は個人的に私はこのようにやって行うことができます。
1)初期化子
class Arel::Attributes::Attribute
# Encode column name like: `posts`.`author_id`
def to_sql
"`#{relation.table_name}`.`#{name}`"
end
def is_not_empty
"#{to_sql} <> ''"
end
end
2に追加)モデル
に追加scope :comments, -> { where(arel_table[:text_value].is_not_empty) }
幸運!
[gem](https://github.com/yivo/arel-is-blank)があります。 – yivo
'NULL <> ''が' NULL'を生成するので、 'COALESCE()'はちょうどこのケースではうんざりです。 'TRUE'条件のみが行を修飾します。 –
良いキャッチ、@ErwinBrandstetter。私は私の答えを更新しました。 –
何について - スコープ:コメント( "NOT text_value IS NULL") – JoshOiknine