我知道,一般来说,在视图中包含控制器代码并不是一个好主意。但是,有什么情况不完全正确吗?例如,这个例子怎么样:
<%= link_to "Upgrade (costs #{ Skill.get_profession_cost('Admin')} gold)" ...
在这个例子中,我需要获得多个角色(管理员,用户和更多)的职业成本。因此,有许多像上面这样的链接。现在的问题是这样做的最佳做法是什么。我可以想到3种方式:
如上图所示。
使用帮助器并获得成本(缺点 - 无论如何我都需要模型中的get_profession_cost函数,因为我在控制器中使用它;因此,帮助器对我来说似乎有点多余)。此外,我还有一个帮助器作为代码应该在控制器中。无论如何。
获取预先安排的哈希,例如:
用户=&gt; 1000,Admin =&gt; 3000 ......等等。这样做更麻烦,而且创建起来有点乏味。
我真的很想你的意见。有没有更好的方法,如果没有,你更喜欢哪一个?
答案 0 :(得分:5)
我的偏好顺序始终是
你的模型上有一个方法很好。我会说更进一步,在你的模型上添加一个类方法,获取所有专业成本的哈希值。这样做的好处是你可以做一个单独的数据库查询(将被缓存),而不是每个职业一个。保持你的控制器尽可能瘦。
然后,您可以在控制器中的每个位置获取所需的哈希值(或者使用过滤器将其添加到很多地方)。
我还会添加一个生成字符串的帮助器(不仅仅是数字)
(costs 12 gold)
如果多次使用。
答案 1 :(得分:0)
我会尝试在控制器中包含所有计算。
何时在视图中包含Ruby代码的示例可以是:
- if boolean_2
% some_html
-if boolean_2
% other_html
(Haml语法)
布尔值1和2将在控制器中设置,视图将仅使用结果。
当然,对于上面例子中的少量代码,它可能并不重要。通常我会在控制器中保留尽可能多的方法调用,并在视图和控制器之间传递散列。
只是我的意见。