ruby-on-rails – Rails – 从我的观点移出计算?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Rails – 从我的观点移出计算?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
目前我在观点上进行一些计算,当然这是一件坏事,
<% categories.each do |c| %>
  ....
    <%= c.transactions.sum("amount_cents") %>
  ....
<% end %>

我正在研究有助于我重构上述问题的方法.

有一件事是将计算转移到我的控制器

@category_sum = @transaction.sum("amount_cents")

这可能是一个更好的解决方案,但你知道.不完美.

由于我有很多用户,我看不到如何将计算器逻辑移动到我的模型中.所以我想我可能需要使用一个新的类,创建一堆方法(sum,average等)并在视图中使用它们?我在正确的轨道上吗?将感谢任何关于如何重组我的代码和设计和实现这个类的建议.

解决方法

隔离视图逻辑的一个意思是使用演示者.

主持人可以让你做这样的事情:

<% categories.each do |c| %>
  ....
    <% present c do |category| %>
    <%= category.transaction_sum %>
    <% end %>
  ....
<% end %>

然后在app / presenters / category_presenter.rb中有一个演示者课程:

class CategoryPresenter < BasePresenter
  presents :category

  def transaction_sum
    category.transactions.sum("amount_cents")
  end
end

当然,如果您在演示者中有很多方法,那么最好使用(但一旦开始减少视图逻辑,则可以快速填充演示者).

这里使用的实现依赖于this pro railscast中所描述的内容.基本思想是简单地拥有一个#present帮助器,它基于对象类来推断一个类名,加载并初始化适当的演示者类.

另一个流行的选择是使用drapper,它使用装饰器的概念,但是演示者基本上是装饰器.

猜你在找的Ruby相关文章