2014-10-23 3 views
2

내가 같은 모델을 가지고,비어있는 직렬화 된 필드가있는 모델을 어떻게 쿼리합니까?

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: []) 생산량 []=> "SELECT \"orders\".* FROM \"orders\" WHERE 1=0"

가 어떻게 그냥 주문을 선택 가야한다 동일한 쿼리 수율에 to_sql를 호출 출하 라인에 기본값이 있거나 빈 배열이있는 경우?

Order.where(shipping_lines: [].to_yaml) 

더러운 해킹처럼 보이지만 적어도 문제가 해결 :

+0

물론 나는'where (shipping_lines : nil)'을 시도했지만 항상 비어 있습니다. – Ziggy

답변

3

내 프로젝트에서 유사한 문제에 작업하는 동안 내가 찾은 유일한 방법은 직접이 같은 YAML에 빈 배열을 캐스팅하는 것입니다.

+0

@ 레노에 감사드립니다. 그것은 나를 미치게했습니다. –