Rails中的助手 - 构建html字符串时最好的方法是什么?

时间:2012-09-06 22:28:01

标签: ruby-on-rails

我通常以这样的方式写帮助者:

  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方法。

是否有标准方法来构建助手?

3 个答案:

答案 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标签是我尽可能避免的代码味道。

相关问题:Rails view helpers in helper file