4

のようなhtmlを生成したいのですが、

<label for='field'>
  Label Text
  <span class='span1'> Some Text 1 </span>
  <span class='span2'> Some Text 2 </span>
  ...
</label>

次のようなヘルパーを呼び出したい

label_for 'field', :label => 'Label Text', :type1 => 'Some Text 1', :type2 => 'Some Text 2'

私はそのために何かをしようとしました、

 content_tag(:label, opts[:label], :for => field_name) do
   ['span1', 'span2'].map { |i| 
     content_tag(:span, opts[i], :class => i) if opts[i] }.compact.joins('+').html_safe
   }
  end

しかし、これはうまくいきません(もちろん)。

['span1', 'span2'] 配列は固定されており、ユーザーは必要な数のスパンを表示することを選択できます。

どうすればこの問題を解決できますか?

4

3 に答える 3

4

なぜこのようなものではないのですか?

def special_label_for(field_name, label_text, span_array)
  content_tag "label", :for => field_name do
    concat label_text
    span_array.each_with_index do |span_content, index|
      concat content_tag("span", span_content, :class => "span" + index.to_s)
    end
  end
end

special_label_for :user_name, "User Name", ["This is the first Span", "And this is the second Span", "Can also have a third span", "Or as many spans as you like"]

このコードはテストしていません。ビューで適切にレンダリングするには、concatまたはを追加/削除する必要がある場合があります。html_safe

于 2012-06-29T02:38:25.547 に答える
0

同様に、Label に複数の html 要素が必要です。ここで解決しました

http://apidock.com/rails/ActionView/Helpers/FormTagHelper/label_tag#1428-Html-inside-Lable-tag

パラメータを渡して動的にすることができます

于 2013-06-05T10:34:47.047 に答える