2012-04-26 6 views
66

ich ein Modell so modifiziert, dass es ein neues Feld, wie ... enthältauswählen, wo nicht null oder leer in mongoid

field :url, :type => String

ich activeadmin verwenden, so dass, wenn ich einen neuen Eintrag @model.url ist leer und in Einträgen, die vor dem Ändern des Schemas erstellt wurden, ist es null. Wie wähle ich beide aus? Ich habe versucht:

# Returns nils and strings 
Model.where(:url.ne => "").count 

# Returns strings and "" 
Model.where(:url.ne => nil).count 

# Returns strings, nils and "" 
Model.where(:url.ne => ["", nil]).count 

Oder, wenn es eine Best Practice für diese Art von Szenario gibt, lass es mich wissen.

Antwort

64

Versuchen

Model.where(:url.nin => ["", nil]).count 

Es funktioniert sogar, wenn url = nil

+2

Dies sollte akzeptiert werden, es funktioniert sogar mit 'url == nil'. –

+0

Ich stimme zu, das ist die wirkliche Antwort und sollte die akzeptierte Antwort auf diese Frage sein. – quinn

+0

Wenn Sie nur nach Einträgen suchen möchten, bei denen ein Feld nicht null ist: 'Model.where (: field.ne => nil)' – Ekkstein

86

Versuchen

Model.where(:url.ne => "", :url.exists => true).count 

Mongoid Symbol Operators

+0

Werke sehen! Ich danke dir sehr. – Duopixel

+5

Funktioniert nicht, wenn 'url'' nil' ist. –