如何正确检查db中的值:
在表中我有字段add_after_sign_in
这是布尔值,默认情况下它是假的...但是如何检查它是否为空而不是真,然后选择这样的行:
我试着:
litem = LineItem.find(:all, :conditions => {:cart_id => cart_id && !:add_after_sign_in })
但是在文中没有这样的记录......为什么? 简单如何检查非真实的表行值?
答案 0 :(得分:1)
conditions
是一个哈希。你只是弄乱了语法。试试这个:
litem = LineItem.find(:all,
:conditions => {:cart_id => cart_id, :add_after_sign_in => [nil, false]})
答案 1 :(得分: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
答案 2 :(得分: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回答后调整。