加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 01:21:26 所属栏目:百科 来源:网络整理
导读:目前我在观点上进行一些计算,当然这是一件坏事, % categories.each do |c| % .... %= c.transactions.sum("amount_cents") % ....% end % 我正在研究有助于我重构上述问题的方法. 有一件事是将计算转移到我的控制器 @category_sum = @transaction.sum("amoun
目前我在观点上进行一些计算,当然这是一件坏事,
<% 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,它使用装饰器的概念,但是演示者基本上是装饰器.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读