2013-06-19 51 views
1

上我用了下一行網頁工作:導軌 - 簡化WHERE條件IS NOT NULL

Model.select(:column).where("column IS NOT NULL") 

我在想,如果有辦法做到這一點更Rails的十歲上下的方式,如使用例如哈希

Model.select(:column).where(column: !nil) 
+0

就像是一個側面問題,您可能會考慮是否可以避免列中出現空值(並且可以通過驗證來防止)。他們是一種痛苦。 –

回答

3

Squeel gem將允許你使用!= nil類型的語法,但本地rails不會。

實施例:Model.where{column != nil}

1

我寧願使用範圍,因爲其更可讀的以及其更易於管理的後面(如與其他範圍合併)

class Model < ActiveRecord::Base 
    scope :not_null, lambda { |column| 
    {:select => column, 
    :conditions => "#{column} NOT NULL" 
    } 
    } 
end 

然後使用

Model.not_null("column_name") 
+0

你是否建議爲每個模型的每一列創建一個單獨的作用域?請展示如何以更乾的方式完成這項工作...... – Mischa

+0

@Mischa,我更新了我的答案以獲取列名作爲參數:) – sameera207

+0

這樣更好,但您仍然必須將其添加到您想要的每個模型中使用它。 – Mischa

0

在Rails 4中,您可以這樣做:

Model.select(:column).where.not(column: nil)