2012-04-26 46 views
66

我修改的模型,因此它包括一个新的领域,如...选取不为空或空的mongoid

field :url, :type => String

我用activeadmin,所以当我创建一个新条目@model.url是空的,并且在更改模式之前创建的条目中为零。我如何选择两者?我曾尝试:

# 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 

或者,如果有这类情况的,请让我知道最好的做法。

回答

64

尝试

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

它的工作原理,即使url = nil

+2

这应该被接受,即使使用'url == nil'也能工作。 – 2015-05-04 19:55:14

+0

我同意,这是真正的答案,应该是这个问题的接受答案。 – quinn 2016-05-23 23:51:01

+0

如果您只想检查字段不为零的条目:'Model.where(:field.ne => nil)' – Ekkstein 2016-11-16 00:01:12

86

尝试

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

看到Mongoid Symbol Operators

+0

作品!非常感谢。 – Duopixel 2012-04-26 18:41:00

+5

如果'url'为'nil'则不起作用。 – 2015-05-04 19:49:32