我可能错过了一些明显的东西,但这就是我要做的事情。
从视图中,我正在调用自定义帮助函数
<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的正确语法是什么?在此先感谢您的帮助。
答案 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
注意表单块周围的()。如果有人有更好的解决方案,请告诉我。