2

我的产品模型有一个成本属性,它的类型是float并且一切正常。创建新产品时,用户可以为免费产品输入 0 或留空,或在付费产品时输入成本,到目前为止效果还不错

现在我正在尝试确定免费项目的范围,但是由于 float 正在返回NIL空字段并且我无法返回 nil 字段。

我试过了

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

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

4

2 回答 2

6

尝试这个:

scope :free, where(:cost => [nil,0] )
于 2012-11-19T14:16:48.933 回答
4

我会改为将成本列设置为 0,以防成本字段留空。它将为您节省 nil 处理并使您的代码更加一致。

为此,只需在您的 Product 模型上应用 before_create 回调:

before_create :set_cost

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

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

于 2012-11-19T14:15:04.453 回答