我想生成像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']数组已修复,用户可以选择根据需要显示多个跨距。
我该如何解决这个问题?
答案 0 :(得分: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
才能在视图中正确呈现。
答案 1 :(得分:0)
类似的事情我需要Label中的多个html元素。我在这里解决了
http://apidock.com/rails/ActionView/Helpers/FormTagHelper/label_tag#1428-Html-inside-Lable-tag
您可以传递参数以制作动态
答案 2 :(得分:0)
您甚至可以执行以下操作:
如果给定数组为list_of_items
list_of_items.map{ |item| content_tag(:span, item) }.join('').html_safe