0

私は活動に多形性のある支払いモデルを持っています

class Payment
  belongs_to :activity, polymorphic: true
end

活動の1つは紹介です。

class Referral
  has_many :payments, :as => :activity

  def self.unpaid
    where(payments.count == 0)
  end
end

未払いのすべての紹介を取得できるように、クラスメソッドを作成したいと思います。上記でこのアプローチを使用していましたが、支払いでundefined_methodエラーが発生しました。
Referral.first.payments.countは正常に機能します。

ここで何が欠けていますか?

4

1 に答える 1

0

あなたが探しているのはActiveRecordスコープだと私には思えます。スコープを使用すると、次のようになります。

class Referral
  has_many :payments, :as => :activity

  scope :unpaid, includes(:payments).where('payments.id is null')
end

これにより、支払いの結合が実行され、条件により、payments.idがない(つまり、支払いがない)すべての列が検索されます。次に、Referral.unpaid.allを実行して、参加した支払いがないすべての紹介を表示できます。

于 2012-11-01T16:49:02.020 に答える