Rails活动记录找到nil

时间:2012-11-19 13:05:51

标签: ruby-on-rails ruby activerecord

我的产品型号有一个费用属性,其类型为float,一切正常。 在创建新产品时,用户可以为免费产品输入0或留空,或者在付费产品时输入成本,到目前为止也能正常使用

现在我正在尝试对自由项进行范围调整,但由于float为空字段返回NIL而我无法返回nil字段。

我试过

scope :free, where("cost IS NULL or cost < ?", 1 )

并且它不返回空白字段(NIL)但仅返回0字段,但我想返回空白(NIL)字段和0字段。我知道rails 3中的float字段返回nil而不是null

2 个答案:

答案 0 :(得分:6)

试试这个:

scope :free, where(:cost => [nil,0] )

答案 1 :(得分:4)

如果成本字段留空,我会将成本列设置为0。它将使您无需处理,并使您的代码更加一致。

要做到这一点,只需在Product模型上应用before_create回调:

before_create :set_cost

def set_cost
  self.cost = 0 if self.cost.blank?
end

然后只需应用迁移即可将所有NULL成本产品转换为0成本产品。