我的产品型号有一个费用属性,其类型为float
,一切正常。
在创建新产品时,用户可以为免费产品输入0或留空,或者在付费产品时输入成本,到目前为止也能正常使用
现在我正在尝试对自由项进行范围调整,但由于float为空字段返回NIL
而我无法返回nil字段。
我试过
scope :free, where("cost IS NULL or cost < ?", 1 )
并且它不返回空白字段(NIL)但仅返回0字段,但我想返回空白(NIL)字段和0字段。我知道rails 3中的float字段返回nil
而不是null
答案 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成本产品。