2010-12-02 6 views
11

レールのアクティブレコードでnullをどのように一致させることができますか?railsのアクティブレコードクエリでnullを比較する方法

User.where(['id = ? and active = ? and activation_code = ?', params[:id], 0, NULL]).first 

または

User.where(['id = ? and active = ? and activation_code = ?', params[:id], 0, nil]).first 

の両方が動作していません。

+0

あなたは何デシベルを使用しているの? – tybro0103

+0

この「方法」は何ですか?以前は見たことがありません。 – tybro0103

+0

また、どのようなエラーが表示されますか? – tybro0103

答えて

20

はこのようにそれを試してみてください。

User.where(['id = ? and active = ? and activation_code IS NULL', params[:id], 0]).first 
+1

完璧な... thnks .. –

26

トリックは「NULL IS」を使用して、ActiveRecordのは正しくゼロ値のためのSQLを生成します。その場合には、ハッシュを使用しています。 Railsの4では

User.where({:id => params[:id], :active => 0, :activation_code => nil}) 
+1

"IS NOT NULL"でどのように動作しますか? –

+1

私はそのためにhttps://github.com/ernie/squeelが大好きです。 'User.where {(id == my {params [:id]})&(active == 0)&(activation_code!= nil)}' – aceofspades

+1

http://blog.remarkablelabs.com/をご覧ください。 2012/12/not-equal-support-for-active-record-queries-rails-4-countdownから2013までのRails 4の 'not'メソッド – aceofspades

5

あなたはこれを行うことができます:

User.where(id: params[:id], active: 0).where.not(activation_code: nil) 
関連する問題