0

如何正确检查数据库中的值:在表中我有add_after_sign_in一个布尔字段,默认情况下它是假的......但是如何检查它是否不为空且不为真,然后选择这样的行:我尝试:

litem = LineItem.find(:all, :conditions => {:cart_id => cart_id && !:add_after_sign_in })

但实际上没有这样的记录......为什么?简单的如何检查非真表行值?

4

3 回答 3

1

conditions是一个哈希。您只是在弄乱语法。试试这个:

litem = LineItem.find(:all, 
  :conditions => {:cart_id => cart_id, :add_after_sign_in => [nil, false]})
于 2013-01-14T19:52:27.900 回答
1

您不能使用这样的符号(但请注意,您可以使用squeel和 Rails 3 做类似的事情)。

我会写(注意它是line_items,它是一个集合):

line_items = LineItem.where(:cart_id => cart_id, :add_after_sign_in => false)

但是,有了健全的模型结构和命名范围,您应该能够编写更多的声明性代码:

line_items = Cart.find(cart_id).line_items.without_add_after_sign_in
于 2013-01-14T19:55:22.603 回答
1

您还可以使用where更易读的语法:

litem = LineItem.where(cart_id: cart_id, add_after_sign_in: [nil, false])

或者,使用范围:

class LineItem
  scope :not_added_after_sign_in, where(add_after_sign_in: [nil, false])
  #...
end

litem = LineItem.where(cart_id: cart_id).not_added_after_sign_in

编辑:在tokland的回答之后进行了调整。

于 2013-01-14T20:02:36.460 回答