Получить сумму активной записи ассоциации - PullRequest
0 голосов
/ 23 сентября 2018

У меня 3 таблицы Campaigns, Contributions, Payments.Таблица кампании содержит информацию о кампании.Вклад содержит информацию о вкладе, а в таблице «Платежи» хранится информация об успешной обработке платежа через платежный шлюз.

Кампания имеет много вкладов.

Вклад имеет один платеж.

enter image description here

Так что моя проблема в том, какя могу получить сумму (: сумму) успешных платежей для конкретной кампании?

Вот как я это делаю сейчас, но у нее много проблем с производительностью

 @campaign = Campaign.find_by_uri(params[:permalink]).decorate
    @payment = @campaign.contributions.select {|cs| cs.payment.state == 'success' unless cs.payment.nil?}
    @total_contributions = 0
    @payment.each { |p| @total_contributions += p.amount }

1 Ответ

0 голосов
/ 23 сентября 2018

Вы можете объявить ассоциацию 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...