12

我通常这样写助手:

  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 和标签助手,即使.html_safe有时我仍然必须使用该方法。

有没有建立助手的标准方法?

4

4 回答 4

10

如果 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>
于 2012-09-06T23:21:11.650 回答
4

最好的方法是在 helpers 中编写 ruby​​ 代码,并且仅在 .html.erb 文件上编写 html 代码,即使它们是“字符串”,所以你应该使用 content_tag 作为助手,如果你想要一个块,你可以使用:

<%= content_tag :div, :class => "strong" do -%>
 Hello world!
<% end -%>

如果您的 html 很大,请考虑转移到部分内容,希望它能解决您的疑问。

于 2012-09-13T21:58:43.927 回答
3

如果您想构建更长的“安全”html,推荐的方法是:

html = "".html_safe
html.safe_concat "Testing boldfaced char <b>A</b>"
html
于 2012-09-14T21:29:47.390 回答
0

实际上,您也可以并且应该在视图助手中使用局部变量。在视图之外使用原始 html 标记是一种代码异味,我会尽量避免。

相关问题:Rails 在帮助文件中查看帮助程序

于 2012-09-06T23:13:29.793 回答