【发布时间】:2015-01-04 08:26:39
【问题描述】:
在 Rails 索引视图中,您迭代集合并显示集合数据中的每个项目。在大多数情况下,我最终会得到一个复杂的视图,因为需要对集合中的特定项目进行额外的计算。这是一个典型的例子:
- if @projects.blank?
= render "shared/placeholder", colspan: "10"
- else
- @hours_total = 0
- @turnover_total = 0
- @projectusers_total = 0
- @projects.each do |project|
- decorate project do |decorates|
- project_calc = ProjectCalculator.new(project)
- hours = project_calc.get_project_data("hours")
- turnover = project_calc.get_project_data("turnover")
- @hours_total += hours
- @turnover_total += turnover
- @projectusers_total += project.projectusers.size
%tr
%td= link_to decorates.data_field(project.name), admin_project_path(project)
%td= decorates.data_field(project.customer.name) unless project.customer.blank?
%td= decorates.data_field(project.company.name_short)
%td= decorates.status
%td= decorates.data_field(project.projectusers.size)
%td= decorates.decimal(hours)
%td= decorates.amount(turnover)
%td= decorates.fixed_price
%td= decorates.show_progress("hours", "compact", hours)
%td= decorates.show_progress("turnover", "compact", turnover)
我已经实现的一项改进是使用装饰器来查看特定内容,另一项改进是使用服务对象进行实际计算。
但这里困扰我的是所有的计算。有什么解决方案可以让这个更简单,最好不要在视图中显示?
【问题讨论】:
标签: ruby-on-rails