2012-11-19 85 views
2

我有我的产品型号的成本属性,其类型为float,并且一切正常。 当创建新产品时,用户可以输入0或留空为免费产品或输入成本,当其付费产品,并迄今也运作良好Rails活动记录查找哪里零

现在我试图范围免费项目,但自float为空字段返回NIL,我不能返回零字段。

我试图

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

,它不只有0返回是空白(NIL)场,但场,但我想返回两个空白(NIL)字段和0场。我知道栏3中的浮动字段返回nil,而不是null

回答

4

我将成本栏设置为0,以防成本字段留空。它将免除你的处理,并使你的代码更加一致。

要做到这一点只适用于你的产品模型before_create回调:

before_create :set_cost 

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

然后,只需应用迁移到把所有的NULL产品成本为0,低成本的产品。

+0

+1,只是因为OP明确表示空白和零意味着同样的事情。 – hometoast

+1

是的,使用null作为“免费”的替代方式是不正确的。 –

6

试试这个:

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