2010-12-02 19 views
11

¿Cómo puedo hacer coincidir el registro activo null in rails.Cómo comparar null in rails consulta de registro activo

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

o

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

Ambos no están trabajando.

+0

lo db está usando? – tybro0103

+0

¿Qué es este método "dónde"? Nunca lo había visto antes – tybro0103

+0

Además, ¿qué error está recibiendo? – tybro0103

Respuesta

20

Trate de esta manera:

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

perfecto ... así que ... –

26

El truco está utilizando un hash, en cuyo caso ActiveRecord generará correctamente SQL para valores nulos, el uso de "IS NULL".

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

¿cómo funciona eso con "IS NOT NULL"? –

+1

Me encanta https://github.com/ernie/squeel por eso. Puede decir 'User.where {(id == my {params [: id]}) & (active == 0) & (activation_code! = Nil)}' – aceofspades

+1

Consulte http://blog.remarkablelabs.com/ 2012/12/not-equal-support-for-active-record-queries-rails-4-countdown-to-2013 para el método 'not' de Rails 4 – aceofspades

5

En Rails 4 se puede hacer esto:

User.where(id: params[:id], active: 0).where.not(activation_code: nil) 
Cuestiones relacionadas