、およびUser
の属性を持つモデルがあります。username
email
name
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, ""])
同じクエリが生成されます。素晴らしいですね :)