Пожалуйста, я действительно не знаю, как лучше всего выполнить рефакторинг этого кода, следуя лучшим методам рельсов.Я пытаюсь вызвать некоторые методы, которые определены в модели в моем приложении rails на другом контроллере.
У меня есть Модель пожертвований и Контроллер панели мониторинга иЯ хотел бы отобразить некоторые данные о пожертвованиях на панели инструментов.Я хочу добиться этого путем определения данных, которые мне нужны, в некоторых методах и областях в модели Пожертвования , а затем вызывать их в контроллере панели мониторинга и затем сделать их доступными в панели инструментов *Просмотры**.
Но я понял, что никакие данные о пожертвованиях не отображаются на приборной панели, что может быть связано с тем, что методы в модели Пожертвования не раскрываются или не отображаютсядоступны для контроллера приборной панели при их вызове, поскольку они представляют собой другую модель и другой контроллер.
Вот мой код
Пожертвования Модель
class Donation < ApplicationRecord
belongs_to :program
scope :paid_count, -> { where(payment: true).count }
scope :unpaid_count, -> { where(payment: false).count }
scope :paid_sum, -> { where(payment: true).sum(:amount) }
scope :deployed_sum, -> { where(deployment: true).sum(:amount) }
scope :not_deployed_sum, -> { where(deployment: false, payment: true).sum(:amount) }
def self.deployed_donations_percent
(deployed_sum.to_f / paid_sum.to_f) * 100
end
def self.not_deployed_donations_percent
(not_deployed_sum.to_f / paid_sum.to_f) * 100
end
end
Контроллер панели инструментов
class DashboardController < ApplicationController
def index
# Paid Donations in Chart
@paid_donations = Donation.paid_count
# Unpaid Donations in Chart
@unpaid_donations = Donation.unpaid_count
# Total Donations Sum
@total_donations_sum = Donation.paid_sum
# Deployed Donations
@deployed_donations = Donation.deployed_sum
# Not Deployed Donations
@not_deployed_donations = Donation.not_deployed_sum
# Deployed Donations Percentage
@deployed_donations_percent = Donation.deployed_donations_percent
# Not Deployed Donations Percentage
@not_deployed_donations_percent = Donation.not_deployed_donations_percent
@total_donations = Donation.count
# Paid Donations
@paid_donations = Donation.paid_count
# Unpaid Donations
@unpaid_donations = Donation.unpaid_count
# All Programs
@programs = Program.all
end
end
Индекс панели инструментов
<h2>
DASHBOARD
</h2>
<h4>Overall Donations</h4>
<%#= area_chart @donations.map { |pay|{name: pay.payment, data: @donations.where(payment: pay).group_by_day(:created_at).count}}, discrete: true %>
<%= line_chart Donation.group(:payment).group_by_day(:created_at).count
<h4>Total Donations</h4>
<%= number_with_delimiter(@total_donations_sum, :delimiter => ',') %>
<h4>Deployed</h4>
<%= number_with_delimiter(@deployed_donations, :delimiter => ',') %>
<div>
<%= @deployed_donations_percent.round %>>
</div>
<h4>Undeployed</h4>
<%= number_with_delimiter(@not_deployed_donations, :delimiter => ',') %>
<div>
<%= @not_deployed_donations_percent.round %>
</div>
<h4>Total Donations</h4>
<header>
<%= @total_donations %>
</header>
<h4>Paid Donations</h4>
<header>
<%= @paid_donations %>
</header>
<h4>Unpaid Donations</h4>
<header>
<%= @unpaid_donations %>
</header>
PROGRAMS
<td>Program Name</td>
<td>Sponsored</td>
</tr>
<% @programs.each do |program| %>
<tr>
<td><%= program.name %></td>
<td><%= program.donations.count %></td>
Пожалуйста, я был бы очень признателен за некоторыесправка о том, как провести рефакторинг этого кода и получить методы Donations модели , доступные для контроллера Dashboard .Спасибо.