Method: Spree::Variant.with_prices

Defined in:
app/models/spree/variant.rb

.with_prices(pricing_options = Spree::Config.default_pricing_options) ⇒ ActiveRecord::Relation

Returns variants that have a price for the given pricing options If you have modified the pricing options class, you might want to modify this scope too.

Parameters:

  • pricing_options (defaults to: Spree::Config.default_pricing_options)

    A Pricing Options object as defined on the price selector class

Returns:

  • (ActiveRecord::Relation)


146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'app/models/spree/variant.rb', line 146

def self.with_prices(pricing_options = Spree::Config.default_pricing_options)
  where(
    Spree::Price.
      where(Spree::Variant.arel_table[:id].eq(Spree::Price.arel_table[:variant_id])).
      # This next clause should just be `where(pricing_options.search_arguments)`, but ActiveRecord
      # generates invalid SQL, so the SQL here is written manually.
      where(
        "spree_prices.currency = ? AND (spree_prices.country_iso IS NULL OR spree_prices.country_iso = ?)",
        pricing_options.search_arguments[:currency],
        pricing_options.search_arguments[:country_iso].compact
      ).
      arel.exists
  )
end