我需要创建一个从1到活动记录中定义的数字的选择框。这个数字会改变。
到目前为止,我知道我可以创建一个这样的选择框:
<%= f.select :numbers, %w[1 2 3 4 5 6 7 8 9 10 ] %>
但我需要的是这样的事情:
<%= f.select :numbers, %w[1..@user.number] %>
有没有办法在rails中创建一个漂亮的动态选择框,或者我是否需要在html中使用for循环或类似的东西手动创建select标签?
由于
答案 0 :(得分:1)
您可以使用to_a
方法将Range转换为数组:
<%= f.select :numbers, (1 .. @user.number).to_a %>
或者你可以递送f.select
原始范围,它会为你致电to_a
:
<%= f.select :numbers, 1 .. @user.number %>
来自fine manual:
选择(对象,方法,选项,选项= {},html_options = {})
为提供的对象和方法创建一个选择标记和一系列包含的选项标记。如果对象可用,则将选择对象当前持有的选项。
choices参数有两种可能的格式,对应于其他助手的输出:
- 扁平收藏:请参阅
options_for_select
- 嵌套集合:请参阅
grouped_options_for_select
options_for_select (container,selected = nil)
接受一个容器(hash,array,enumerable,你的类型)并返回一串选项标签。
Range是一个Enumerable,因此上面的两个f.select
调用都应该产生相同的结果。