2014-01-27 1 views
0

.where를 사용하여 해당 속성을 사용하여 객체 (변형)를 찾으려는 경우 매개 변수 중 하나도 nil이 아닌 경우 쿼리가 작동하지만 그렇지 않으면 아무 것도 반환하지 않습니다..where는 nil 속성을 쿼리 할 때 nil을 반환합니다.

product.product_options.blank? ? options = [nil] : options = product.product_options 
product.product_sides.blank? ? sides = [nil] : sides = product.product_sides 
product.product_sizes.blank? ? sizes = [nil] : sizes = product.product_sizes 

valid_variants = [] 

sides.product(sizes, options).each do |side, size, option| 
    side.blank? ? side_id = nil : side_id = side.id 
    size.blank? ? size_id = nil : size_id = size.id 
    option.blank? ? option_id = nil : option_id = option.id 

    valid_variants << product.variants.where(product_size_id: size_id, product_side_id: side_id, product_option_id: option_id).first 
end 

측면, 크기 및 옵션 IDS하지만 valid_variants가 비어 일치 변종을 포함 않습니다이 경우 product.variants에 : 여기 내 코드입니다.

를 좁은 방 (option_id : SIZE_ID, product_side_id : side_id, product_option_id product_size_id)

여기
{"id"=>1, "product_side_id"=>nil, "product_size_id"=>1, "product_id"=>1, "created_at"=>Mon, 27 Jan 2014 16:28:46 UTC +00:00, "updated_at"=>Mon, 27 Jan 2014 16:28:46 UTC +00:00, "product_option_id"=>1} 
{"id"=>2, "product_side_id"=>nil, "product_size_id"=>1, "product_id"=>1, "created_at"=>Mon, 27 Jan 2014 16:28:46 UTC +00:00, "updated_at"=>Mon, 27 Jan 2014 16:28:46 UTC +00:00, "product_option_id"=>2} 
{"id"=>3, "product_side_id"=>nil, "product_size_id"=>2, "product_id"=>1, "created_at"=>Mon, 27 Jan 2014 16:28:46 UTC +00:00, "updated_at"=>Mon, 27 Jan 2014 16:28:46 UTC +00:00, "product_option_id"=>1} 
{"id"=>4, "product_side_id"=>nil, "product_size_id"=>2, "product_id"=>1, "created_at"=>Mon, 27 Jan 2014 16:28:46 UTC +00:00, "updated_at"=>Mon, 27 Jan 2014 16:28:46 UTC +00:00, "product_option_id"=>2} 

가 valid_variants 내용 product.variants.where를 사용 : 여기

는 product.variants의 내용 인 (: SIZE_ID, product_side_id : side_id, product_option_id : option_id product_size_id)

,369,136 여기
[nil, nil] 

는 valid_variants 내용 product.variants.where를 사용3210

[#<ActiveRecord::AssociationRelation []>] 
+1

결과 SQL 쿼리를 확인 했습니까 ?? 그것이 당신이 원하는 것과 일치하는지보기 위해서 ?? – bjhaid

답변

0

각 반복마다 valid_variants 배열을 재설정 중입니다. 루프의 valid_variants = [] 외부 이동 :

valid_variants = [] 
sides.product(sizes, options).each do |side, size, option| 
    side_id = side.blank? ? nil : side.id 
    size_id = size.blank? ? nil : size.id 
    option_id = option.blank? ? nil : option.id 

    valid_variants << product.variants.where(product_size_id: size_id, product_side_id: side_id, product_option_id: option_id).first 
end 

side_id, size_idoption_id 초기화 업데이트되었습니다.

+0

나는 각 블록에서 그것을 옮겼으나 여전히 아무것도 반환하지 않는다. – Jack

관련 문제