当我有一个类似的模型时
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"
我应该如何为其运输线路只选择具有默认值或空数组的订单?
在我的项目中处理类似问题时,我发现的唯一方法是直接将空数组强制转换为YAML,如下所示:
Order.where(shipping_lines: [].to_yaml)
看起来像一个肮脏的黑客,但至少它解决了问题。