Activerecord检查值是否为真

时间:2013-01-14 19:44:53

标签: ruby-on-rails ruby

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

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

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

3 个答案:

答案 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回答后调整。