Rails 3: область действия необязательной ассоциации has_one - PullRequest
4 голосов
/ 22 июля 2011

У меня есть две модели: продажа и оплата

class Sale < ActiveRecord::Base
  has_one :payment
end

class SaleCancelation < ActiveRecord::Base
  belongs_to :payment
end

Я хочу создать две области: «с оплатой» и «без оплаты».

«with_payment» работает легко:

class Sale < ActiveRecord::Base
  scope :with_payment, joins( :payment )
end

Но как мне создать область, которая находит каждую продажу, у которой нет соответствующего платежа?

Ответы [ 3 ]

4 голосов
/ 25 августа 2012

Еще один способ сделать это:

scope :without_profile, lambda { includes(:user_profile).where('user_profiles.id is null') }
4 голосов
/ 22 июля 2011

Как насчет:

scope :without_payment, where( 'id not in (select sales_id from payments)' )
0 голосов
/ 04 декабря 2014
class Sale < ActiveRecord::Base
    scope :with_payment, joins( :payment )
    scope :without_payment, Sale.all - Sale.with_payment
end
...