2010-12-02 27 views
11

Comment puis-je faire correspondre un enregistrement nul dans un enregistrement actif de rails?Comment comparer une requête d'enregistrement active null in rails

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

ou

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

Les deux ne fonctionnent pas.

+0

ce que db utilisez-vous? – tybro0103

+0

Quelle est cette méthode "où"? Je ne l'ai jamais vu auparavant. – tybro0103

+0

Aussi, quelle erreur obtenez-vous? – tybro0103

Répondre

20

Essayez comme ceci:

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

parfait ... thnks .. –

26

L'astuce utilise un hachage, auquel cas ActiveRecord sera correctement générer des requêtes SQL pour les valeurs nulles, en utilisant "IS NULL".

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

comment cela fonctionne avec "IS NOT NULL"? –

+1

J'aime vraiment https://github.com/ernie/squeel pour cela. Vous pouvez dire 'User.where {(id == mon {params [: id]}) & (actif == 0) & (code d'activation! = Nil)}' – aceofspades

+1

Consultez http://blog.remarkablelabs.com/ 2012/12/not-equal-support-for-active-record-questions-rails-4-countdown-to-2013 pour la méthode 'not 'de Rails 4 – aceofspades

5

Dans Rails 4, vous pouvez le faire:

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