【发布时间】:2011-01-12 18:40:07
【问题描述】:
警告:这里是菜鸟。
我知道这是一个微不足道的主题,但我很难弄清楚如何通过将部分视图移入助手来简化我的视图。例如,我一直读到您观点中的条件是提取到帮助器的主要候选者,但我真的找不到这方面的例子,而且我试图实现这一点的尝试失败了。
例如,假设我有:
#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 -%>
在我看来,这让我有点恼火,但我究竟怎么能把它移到一个助手身上呢?如果可能的话,进一步简化它。 (我在某处读到条件语句很糟糕,但我无法在没有它们的情况下编写任何程序。)
另一个例子:我需要id我的body标签,格式为controller_action。到目前为止,我得到的最好的是:
#index.html.erb
<body id="<%= controller_action %>">
……和……
#application_helper.rb
def controller_action
@id = @controller.controller_name + "_" + @controller.action_name
end
我不是专家,但这对我来说仍然很难看。
为了让事情变得更复杂,Ryan Singer said something I liked:将 ERB 视为图像标签,使用助手“揭示意图”。然后在接下来的呼吸中说你不应该在帮助程序中使用 HTML,因为那是通往地狱的道路。怎么回事?两者如何兼容?如果到了可以在视图中声明行为的地步,那么肯定应该有很多 HTML 需要在幕后渲染吗?看不懂。
所以,基本上就是这样。如果有人能就此分享一些想法,或者指出我对这个主题的一些深入阅读,我将不胜感激——我发现它在网络上的报道非常薄弱。我已经用谷歌搜索了它,但谁知道呢。
【问题讨论】:
-
小注。使用
for很好,但使用迭代器更符合 Ruby 约定,例如,<% @beasts.each do |beast| %>。 -
@Sarah:谢谢。只是我真的很喜欢使用
for的自然语言方面。
标签: ruby-on-rails refactoring views helper