2012-04-26 8 views
66

tôi sửa đổi một mô hình như vậy nó bao gồm một lĩnh vực mới, chẳng hạn như ...Chọn nơi không null hoặc trống trong mongoid

field :url, :type => String

tôi sử dụng activeadmin, vì vậy khi tôi tạo một mục mới @model.url trống và trong các mục được tạo trước khi thay đổi lược đồ là không. Làm cách nào để chọn cả hai? Tôi đã thử:

# 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 

Hoặc, nếu có phương pháp hay nhất cho loại kịch bản này, vui lòng cho tôi biết.

Trả lời

64

thấy Hãy thử

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

Nó hoạt động ngay cả khi url = nil

+2

Điều này sẽ được chấp nhận, nó hoạt động ngay cả với 'url == nil'. –

+0

Tôi đồng ý, đây là câu trả lời thực sự và phải là câu trả lời được chấp nhận cho câu hỏi này. – quinn

+0

Trong trường hợp bạn chỉ muốn kiểm tra các mục mà một trường không phải là nil: 'Model.where (: field.ne => nil)' – Ekkstein

86

Hãy thử

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

Mongoid Symbol Operators

+0

trình! Cảm ơn bạn rất nhiều. – Duopixel

+5

Không hoạt động nếu 'url' là' nil'. –