我通常以这样的方式写帮助者:
def bloco_vazio (texto = "", btn = "", args={})
titulo = content_tag :h3, "Vazio!"
p = content_tag :p, texto
content_tag :div, (titulo + tag(:hr) + p + btn ), args
end
但我常常看到人们使用其他方法,例如:
def flash_notice
html = ""
unless flash.empty?
flash.each do |f|
html << "<div class='alert alert-#{f[:type].to_s}'>"
html << "<a class='close' data-dismiss='alert'>×</a>"
html << f[:text].to_s
html << "</div>"
end
end
html
end
或
def a_helper (some_text ="")
%{ <h3>some title</h3>
<p>#{some_text}</p>
}%
end
我过去使用过这两个问题并遇到了一些问题,然后开始使用content_tag和tag帮助程序,即使我仍然需要使用.html_safe
方法。
是否有标准方法来构建助手?
答案 0 :(得分:7)
如果html超过1行,我通常将html放在部分中并使用自定义帮助方法调用它
查看强>
<= display_my_html(@item, {html_class: "active"}) %>
<强>辅助强>
def display_my_html(item, opts={})
name = item.name.upcase
html_class = opts.key?(:html_class) ? opts[:html_class] : "normal"
render "my_html", name: name, html_class: html_class
end
<强>部分强>
<div class="<%= html_class %>">
<span class="user">
<%= name %>
</span>
</div>
答案 1 :(得分:3)
最好的方法是在helper和html中只在.html.erb文件中编写ruby代码,即使它们是“字符串”,所以你应该使用content_tag作为帮助者,如果你想要一个块,你可以使用:
<%= content_tag :div, :class => "strong" do -%>
Hello world!
<% end -%>
如果您的html很大,请考虑转移到部分内容,希望它能够澄清您的疑问。
答案 2 :(得分:0)
实际上,您也可以并且应该在视图助手中使用局部视图。在视图外部使用原始html标签是我尽可能避免的代码味道。