środa, 1 lipca 2015

OR zamiast AND w zapytaniach Rails

Przy zapytaniu where - wynikowy SQL jest generowany zazwyczaj z AND. Na przykład w tym zapytaniu wszędzie w SQL'u jest AND:
VariantDetail.joins(product_detail: {product: [:channel, :type]},
                    variant: {starpacks: :version})
             .all_active
             .where(code: cover[:id], value: value,
                    pkb_cats_discr: {percent: percent.to_i},
                    pkb: {channel_id: channel.id, type_id: @type.id},
                    version: {code: ver.code})

Mi zaś, chodziło o to, aby kolumna percent była rozważana dla dwóch wartości: jako 0 (zero) albo NULL.
Okazało się, że można to zrobić w dość prosty sposób. Wystarczy użyć w klauzuli where, tablicy.
Na przykład tak:
{percent: [0, nil]}
co skutkuje takim kompletnym zapisem:
VariantDetail.joins(product_detail: {product: [:channel, :type]},
                    variant: {starpacks: :version})
             .all_active
             .where(code: cover[:id], value: value,
                    pkb_cats_discr: {percent: [0, nil]},
                    pkb: {channel_id: channel.id, type_id: @type.id},
                    version: {code: ver.code})

Brak komentarzy:

Prześlij komentarz