在Ruby中的content_tag()方法中添加for语句?

时间:2012-12-06 13:51:33

标签: html ruby-on-rails ruby html-table content-tag

这就是我想在Ruby on Rails中构建的内容:

<tr>
<td>attribute0</td>
<input name="1" type="radio" value="1" />
<input name="1" type="radio" value="2" />
<input name="1" type="radio" value="3" />
<input name="1" type="radio" value="4" />
<input name="1" type="radio" value="5" />
<td>attribute1</td>
</tr>

单选按钮的数量应该是可变的。 我正在使用content_tag方法生成HTML标记:

@template.content_tag(:tr, @template.content_tag(:td, ... ))

是否可以添加类似

的语句
for i in 1..5 do
    @template.tag(:input, :type => 'radio', :value => i, :name => options[:name])
end

作为content_tag的参数?

1 个答案:

答案 0 :(得分:2)

您可以传入一个块或使用帮助器。这是辅助方法的一个例子

def inputs(amount, name)
  [1..amount].inject('') do |html, num| 
    html + tag(:input, type: 'radio', value: num, name: name)
  end
end

编辑:块的例子

文档:http://api.rubyonrails.org/classes/ActionView/Helpers/TagHelper.html#method-i-content_tag

content_tag :ul do
  5.times.map{ content_tag :li, 'element' }.reduce(&:+)
end

# same as

elements = 5.times.map{ content_tag :li, 'element' }.reduce(&:+)
content_tag :ul, elements