Вы можете объявить ассоциацию has_many: через для payments
в Campaign
модели и получить сумму успешных платежей, как показано ниже:
Модель кампании
class Campaign < ActiveRecord::Base
has_many :contributions
has_many :payments, through: :contributions
end
Затем вы можете отфильтровать успешные платежи с помощью новой ассоциации, как показано ниже:
@campaign.payments.where(state: 'success')
Теперь вы можете получить сумму суммы каждого успешного платежа
@campaign.payments.where(state: 'success').sum(:amount)
Итак, окончательный код будет выглядеть так:
@campaign = Campaign.find_by_uri(params[:permalink]).decorate
@total_contributions = @campaign.payments.where(state: 'success').sum(:amount)