属性、およびを持つUserモデルがあります。usernameemailname
usernameとemailはサインアップ時に必要ですが、必須ではありませんname。
記入済みのすべてのユーザーを検索するクエリは何でしょうかname(つまり、nil ではありません)。
クエリは少なくとも Rails 3.2 および 4.0 と互換性がある必要があります。
私は次の行で何かを考えています:
User.where(name: present?)
属性、およびを持つUserモデルがあります。usernameemailname
usernameとemailはサインアップ時に必要ですが、必須ではありませんname。
記入済みのすべてのユーザーを検索するクエリは何でしょうかname(つまり、nil ではありません)。
クエリは少なくとも Rails 3.2 および 4.0 と互換性がある必要があります。
私は次の行で何かを考えています:
User.where(name: present?)
データベース内の空の値は、特別な値を取得しますNULL。が設定されているかどうかをテストするには、特別なコンパレータIS NULLまたはを使用しIS NOT NULLます。
その後、空の文字列が入力された可能性がまだ残っているため、完全なテストは次のようになります。
@users = User.where("name is NOT NULL and name != ''")
[Rails 4+ 用に更新]
Rails 4以降、次のように書くことができます:
User.where.not(name: [nil, ""])
これにより、同じクエリが生成されます。素晴らしい :)
NOT SQL クエリは where.not で作成できます
@users = User.where.not(name: nil)
これを試して:
User.where("name IS NOT NULL AND name != ?", "")
@nathavandaのコメントに従って回答を編集しました。私の意見では、彼の回答は受け入れられるべきです。
You can simply do this:
User.where.not(name: '')
の性質上、isまたは空文字列のnotレコードは含まれません。との詳細については、この記事を参照してください。namenilnotnil