2010-12-02 5 views
11

Wie kann ich Null in Schienen aktiven Datensatz übereinstimmen.Wie zu vergleichen Null in Schienen aktive Datensatzabfrage

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

oder

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

Beide sind nicht funktioniert.

+0

welche db verwenden Sie? – tybro0103

+0

Was ist das "wo" -Methode? Habe es noch nie gesehen. – tybro0103

+0

Welchen Fehler bekommen Sie auch? – tybro0103

Antwort

20

es so versuchen:

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

perfekt ... thnks .. –

26

Der Trick einen Hash verwendet, in welchem ​​Fall Active korrekt SQL für Null-Werte generieren "IS NULL" verwenden.

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

wie funktioniert das mit "IS NOT NULL"? –

+1

Ich liebe wirklich https://github.com/ernie/squeel dafür. Sie können 'User.where {(id == mein {params [: id]}) & (aktiv == 0) & (activation_code! = Nil)}' – aceofspades

+1

auschecken http://blog.remarkablelabs.com/ 2012/12/not-equal-support-for-active-records-requests-rails-4-countdown-to-2013 für die "not" -Methode von Rails 4 – aceofspades

5

In Schienen 4, dies zu tun:

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