如何查询具有空序列化字段的模型?

时间:2014-10-23 19:39:12

标签: ruby-on-rails-4 rails-activerecord arel

当我有一个类似的模型时,

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"

我应该如何选择具有默认值或空数组的订单作为其运输行?

1 个答案:

答案 0 :(得分:5)

我在项目中处理类似问题时找到的唯一方法是直接将空数组转换为YAML,如下所示:

Order.where(shipping_lines: [].to_yaml)

看起来像是一个肮脏的黑客,但至少它解决了这个问题。