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

私は過去にこれらの 2 つのラストを使用し、いくつかの問題に遭遇した後、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

最良の方法は、ヘルパーに 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 に答える