如何从rails中的范围构建选择标记

时间:2010-02-10 18:56:54

标签: ruby-on-rails ruby

我希望有一个下拉值,其值为10%20%30%,所以直到100。

在ruby中可以通过

完成
(10..100).step(10) { |i| p i }

如何将其转换为选择标签?

我试过了:

<%=p.select :thc, options_for_select((10..100).step(10) {|s| ["#{s}%", s]})%>

但这是打印10 11 12 13....100

4 个答案:

答案 0 :(得分:15)

你几乎拥有它:

<%=p.select :thc, options_for_select((10..100).step(10).to_a.map{|s| ["#{s}%", s]})%>

答案 1 :(得分:4)

#step返回一个枚举器(或者如你所示,得到)。看起来你想要的是在这个枚举器上调用#collect

<%=p.select :thc, options_for_select((10..100).step(10).collect {|s| ["#{s}%", s]})%>

答案 2 :(得分:4)

<%= select("sale", "discount", (10..100).step(10).collect {|p| [ "#{p}%", p ] }, { :include_blank => true }) %>

答案 3 :(得分:2)

不提供格式化值。

如果你像我一样登陆这里,无需使用step()或提供格式化的价值(例如“20%”),这是一个很好而简洁的方法:

<%= f.select :year, (2011..Date.today.year).to_a %>

<select id="report_year" name="report[year]">
  <option value="2011">2011</option>
  <option value="2012">2012</option>
  <option value="2013">2013</option>
  <option value="2014">2014</option>
  <option value="2015">2015</option>
</select>

使用默认

<%= f.select :year, options_for_select( (2011..Date.today.year).to_a, Date.today.year ) %>

<select id="report_year" name="report[year]">
  <option value="2011">2011</option>
  <option value="2012">2012</option>
  <option value="2013">2013</option>
  <option value="2014">2014</option>
  <option value="2015" selected="selected">2015</option>
</select>