2013-12-22 2 views
6

私はオプションのツイッター統合を持つユーザーモデルを持っています。Rails4/Rails5 model findどこではない

ユーザーがTwitter認証を完了したときにのみ入力される 'username'属性を追加しました。

すべてのユーザーを統合したいと思っています。属性が何かであるか、またはそれがどこでないかのすべてのオブジェクトを見つける最良の方法は何ですか?

答えて

19

、私が見つけた最も簡単な方法:

User.where.not(username: nil)

私はあなたにもちょうどどこ文でSQLを書くのですができ、他の回答に

+0

私は申し訳ありませんが、少なくともあなたの質問を「空でない場所」と表現したときに、あなたは正しくありません。あなたは 'User.where.not(username: '')'を使う必要があります。なぜですか?クエリでは、非nil(またはNULL)値、* not *空(別名空白)値のみ無視されます。微妙な違いはありますが、重要な違いです。たとえば、テキスト列があり、ユーザーがすべてのテキストを削除して保存するとします。もはや 'nil'(NULL)ではなく、空文字列(空文字列のように)です。上記のクエリには依然としてそのレコードが含まれます。 – Karl

+0

ありがとう@カール私は質問のテキストを更新しました。フィールドはユーザーによって更新されず、oauth統合によってのみ更新され、検証では空白が許可されません。 –

0

を見てみたい:

User.where("username <> nil") 
+0

ブレアアンダーソンの答えは、これを行うためのよりよい方法です。 '<> '演算子を理解できないデータストアがあると、エラーが発生します。 'where.not'はデータストアにとらわれず、理解できるものに変換します。 –

関連する問題