我可能在这里遗漏了一些明显的东西,但这就是我想要做的。
从视图上看,我正在调用自定义辅助函数
<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 的正确语法是什么?预先感谢您的帮助。
恕我直言,您不应该在 Ruby 代码中硬编码 HTML。相反,更喜欢部分视图。
module ServicesHelper
def display_services(user)
render :partial => "shared/display_services", :locals => {:user => user}
end
end
只是对风格的建议,我喜欢做这样的事情:
您认为:
<% display_services %>
请注意,不再需要
=
。
然后,助手使用 concat()
将某些内容附加到您的页面,并且将长字符串放在一起的操作也已过时:
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 %>
事实证明,我不得不做这样的事情
def display_services
html = "<div>"
html << (form_for @user do |f|
f.text_field ...
end)
html << "</div>"
end
注意表单块周围的 ()。如果有人有更好的解决方案,请告诉我。
我喜欢上面@0livier给出的答案。对于那些想知道用例可能是什么的人来说,我发现当我需要递归渲染视图时它很有用