注意:我是新手。
我知道这是一个微不足道的主题,但我在尝试弄清楚如何通过将视图的某些部分移入助手来简化它们方面遇到了很多困难。例如,我一直读到视图中的条件语句是提取为助手的主要候选项,但我无法找到这方面的示例,并且我的尝试失败了。
例如,假设我有以下内容:
#index.html.erb
<% for beast in @beasts do -%>
<% if beast.dead? -%>
<%= beast.body %>
<%= link_to "bury", bury_beast_path( :id => beast.id ) %>
<% else -%>
<%= beast.body %>
<%= link_to "kill!", kill_beast_path( :id => beast.id ) %>
<% end -%>
<% end -%>
这个在我的视图里有点让我烦心,但是我该如何将它移动到一个helper里面?如果可能的话,进一步简化它。(我看过某处的条件语句很糟糕,但就算是在我之外,也无法理解怎样能编写任何东西而没有它们。)
另一个例子:我需要使用格式controller_action
对body
标签进行id
设置。目前最好的方案是:
#index.html.erb
<body id="<%= controller_action %>">
...并且...
#application_helper.rb
def controller_action
@id = @controller.controller_name + "_" + @controller.action_name
end
我不是专家,但即使是对我来说,那也太丑了。
更加复杂的是,Ryan Singer说了一些我喜欢的话:将ERB视为图像标记,使用帮助程序“揭示意图”。然后在下一句中说,你不应该在帮助程序中有任何HTML,否则就会走向地狱。这两件事情怎么兼容呢?如果已经到了可以在视图中声明行为的程度,那么肯定有很多HTML需要在后台渲染吧?我无法理解。
所以,基本上就是这样。如果有人能分享一些对此的想法,或将我指向一些关于这个主题的深入阅读材料,我会非常感激 - 我发现网络上对此的覆盖率真的很弱。我已经用尽了谷歌搜索,但谁知道呢。
for
循环是可以的,但使用迭代器更符合 Ruby 的惯例,例如<% @beasts.each do |beast| %>
。 - Sarah Vessels