属性が存在するレコードを検索する 質問する

属性が存在するレコードを検索する 質問する

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

usernameおよびはemailサインアップ時に必須ですが、 は必要ありませんname

入力したすべてのユーザーname(つまり、nil ではない)を検索するクエリは何でしょうか?

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

私は次のようなことを考えています:

User.where(name: present?)

ベストアンサー1

[2022年5月13日更新]

SQLで属性が存在しないすべてのレコードを取得するには、次のように記述します。

WHERE attr IS NULL or attr = ''

よくある間違いは、これを否定して

WHERE attr is not null and attr != '' 

しかしSQLでは、これは次のように書くのと同じである。

WHERE attr != '' 

等価演算子を使用する場合、NULL 値は常に無視されるためです。

したがって、これをレールに翻訳すると次のようになります。

User.where.not(name: '')

[私の古い答え]

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

空の文字列が入力された可能性がまだ残っているので、完全なテストは

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

[レール4以降に更新]

Rails 4 以降では次のように記述できます:

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

同じクエリが生成されます。素晴らしいですね :)

おすすめ記事