当我有一个类似的模型时,
class Order < ActiveRecord::Base
serialize :shipping_lines
...
end
如何查找shipping_lines
为空的所有记录?如果我这样做,
Order.select(order.shipping_lines).limit(5)
我明白了,
=> [#<Order id: nil, shipping_lines: [#<ShippingLine:0x007f8c5d10ced0>]>,
#<Order id: nil, shipping_lines: [#<ShippingLine:0x007f8c6ef84718>]>,
#<Order id: nil, shipping_lines: []>,
#<Order id: nil, shipping_lines: []>,
#<Order id: nil, shipping_lines: []>
然后查询Order.where(shipping_lines: [])
产生[]
并在同一查询中调用to_sql
会产生=> "SELECT \"orders\".* FROM \"orders\" WHERE 1=0"
我应该如何选择具有默认值或空数组的订单作为其运输行?
答案 0 :(得分:5)
我在项目中处理类似问题时找到的唯一方法是直接将空数组转换为YAML,如下所示:
Order.where(shipping_lines: [].to_yaml)
看起来像是一个肮脏的黑客,但至少它解决了这个问题。