Я работаю над приложением для получения стипендии, где люди могут делать пожертвования в поддержку различных программ, в которых они хотят участвовать. Мне нужна помощь с рефакторингом Rubocop в рельсах.
У меня есть следующие проблемы;
- Действие контроллера вызывает только один метод модели, кроме начального поиска или нового. Сделайте в модели кастомные методы .new или .update со всем необходимым.
- Слишком большой размер условия ветки назначения для индекса
- В методе слишком много строк
Я пытался реорганизовать код, но все еще сталкиваюсь с теми же проблемами с кодом.
Мои коды;
Контроллер панели мониторинга (начальный*)
class DashboardController < ApplicationController
def index
#Paid Donations in Chart
@paid_donations = Donation.where(payment: true).count
#Unpaid Donations in Chart
@unpaid_donations = Donation.where(payment: false).count
#Total Donations Sum
@total_donations_sum = Donation.where(payment: true).sum(:amount)
#Deployed Donations
@deployed_donations = Donation.where(deployment: true).sum(:amount)
#Not Deployed Donations
@not_deployed_donations = Donation.where(deployment: false, payment: true).sum(:amount)
#Deployed Donations Percentage
@deployed_donations_percentage = (@deployed_donations.to_f / @total_donations_sum.to_f) * 100
#Not Deployed Donations Percentage
@not_deployed_donations_percentage = (@not_deployed_donations.to_f / @total_donations_sum.to_f) * 100
#Total Donations
@total_donations = Donation.count
#Paid Donations
@paid_donations = Donation.where(payment: true).count
#Unpaid Donations
@unpaid_donations = Donation.where(payment: false).count
#All Programs
@programs = Program.all
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_percentage = percentage(@deployed_donations, @total_donations_sum)
# Not Deployed Donations Percentage
@not_deployed_donations_percentage = (@not_deployed_donations.to_f / @total_donations_sum.to_f) * 100
# Total Donations
@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
Модель пожертвования (начальная)
class Donation < ApplicationRecord
belongs_to :program
end
Модель пожертвований (рефакторинг)
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 :paid_sum, -> { where(payment: true).sum(:amount) }
scope :deployed_sum, -> { where(deployment: true).sum(:amount) }
scope :not_deployed_sum, -> { where(deployment: false).sum(:amount) }
def percentage(donate, total)
(donate.to_f / total.to_f) * 100
end
end
Мне нужна помощь по передовым методам работы с рельсами для решения этих проблем, следуя принципу тощих моделей и тощих контроллеров рельсов.