Добавление оператора for в метод content_tag() в Ruby?
Вот что я хочу построить в 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 ответ
Решение
Вы можете передать в блоке или использовать помощника. Вот пример вспомогательного метода
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
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