Rails在帮助文件中查看帮助程序

时间:2009-09-04 18:50:57

标签: ruby-on-rails

我可能错过了一些明显的东西,但这就是我要做的事情。

从视图中,我正在调用自定义帮助函数

<div>
  <%=display_services%>
</div>

带有display_services函数的辅助文件

def display_services
  html = "<div>"
  form_for @user do |f|
   f.text_field ...
  end
 html << "</div>"
end

我发现form_for方法和f.text_field直接输出到HTML流而没有我喜欢的div包装器。在display_services中输出所有HTML的正确语法是什么?在此先感谢您的帮助。

3 个答案:

答案 0 :(得分:30)

恕我直言,你不应该在Ruby代码中硬编码HTML。相反,更喜欢partials views

module ServicesHelper
  def display_services(user)
    render :partial => "shared/display_services", :locals => {:user => user}
  end
end

答案 1 :(得分:22)

只是对风格的建议,我喜欢做这样的事情:

在您看来:

<% display_services %>

请注意,不再需要=。 然后帮助者使用concat()向页面添加内容,并且put-long-strings-together的内容也已过时:

def display_services
  concat("<div>")
  form_for @user do |f|
    f.text_field ...
  end
  concat("</div>")
end

<div>标记放入帮助程序是否是必要的。如果你需要一个帮助器来嵌入某个块,你也可以使用一些yield-magic:

def block_helper
  concat("<div>")
  yield
  concat("</div>")
end

并在你的视图中使用它 - 当然也有帮助者:

<% block_helper do %>
  cool block<br/>
  <% display_services %>
<% end %>

答案 2 :(得分:5)

事实证明,我必须做这样的事情

def display_services
  html = "<div>"
  html << (form_for @user do |f|
   f.text_field ...
  end)
  html << "</div>"
end

注意表单块周围的()。如果有人有更好的解决方案,请告诉我。