20

属性、およびを持つUserモデルがあります。usernameemailname

usernameemailはサインアップ時に必要ですが、必須ではありませんname

記入済みのすべてのユーザーを検索するクエリは何でしょうかname(つまり、nil ではありません)。

クエリは少なくとも Rails 3.2 および 4.0 と互換性がある必要があります。

私は次の行で何かを考えています:

User.where(name: present?)
4

5 に答える 5

38

データベース内の空の値は、特別な値を取得しますNULL。が設定されているかどうかをテストするには、特別なコンパレータIS NULLまたはを使用しIS NOT NULLます。

その後、空の文字列が入力された可能性がまだ残っているため、完全なテストは次のようになります。

@users = User.where("name is NOT NULL and name != ''")

[Rails 4+ 用に更新]

Rails 4以降、次のように書くことができます:

User.where.not(name: [nil, ""])

これにより、同じクエリが生成されます。素晴らしい :)

于 2013-07-19T09:40:42.167 に答える
11

NOT SQL クエリは where.not で作成できます

@users = User.where.not(name: nil)
于 2015-01-13T21:13:24.410 に答える
2

これを試して:

User.where("name IS NOT NULL AND name != ?", "")

@nathavandaのコメントに従って回答を編集しました。私の意見では、彼の回答は受け入れられるべきです。

于 2013-07-19T09:30:32.117 に答える
0

You can simply do this:

User.where.not(name: '')

の性質上、isまたは空文字列のnotレコードは含まれません。との詳細については、この記事を参照してください。namenilnotnil

于 2021-11-19T11:19:26.733 に答える