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,它使用装饰器的概念,但是演示者基本上是装饰器. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |