Tru*_*oft 9 html-select ruby-on-rails
我想使用rails collection_select或者options_for_select不是基于模型的数组项来创建一个select标签.选项的值应该是每个项的数组索引.
示例:所需的输出['first', 'second', 'third']:
<select id="obj_test" name="obj[test]">
<option value="0">first</option>
<option value="1">second</option>
<option value="2">third</option>
</select>
Run Code Online (Sandbox Code Playgroud)
Jas*_*son 13
你也可以这样做一行if the_array = ['first', 'second', 'third']
<%= select "obj", "test", the_array.each_with_index.map {|name, index| [name,index]} %>
Run Code Online (Sandbox Code Playgroud)
我早在Rails 2.3.14中测试过它.
Tru*_*oft 11
我在问题中提到项目不是数据库中的对象,它们只是字符串,如下所示:
the_array = ['first', 'second', 'third']
Run Code Online (Sandbox Code Playgroud)
感谢Lichtamberg,我这样做了:
f.select(:test, options_for_select(Array[*the_array.collect {|v,i| [v,the_array.index(v)] }], :selected => f.object.test)) %>
Run Code Online (Sandbox Code Playgroud)
这给出了所需的输出:
<option value="0">first</option>
<option value="1">second</option>
<option value="2">third</option>
Run Code Online (Sandbox Code Playgroud)
我没有使用Hash,因为顺序很重要,我的ruby版本不大于1.9
Ruby(出色地)添加了一个with_index方法map,collect因此您现在可以执行以下操作:
options_for_select ['first', 'second', 'third'].collect.with_index.to_a
Run Code Online (Sandbox Code Playgroud)
这将为您提供以下HTML:
<option value="0">first</option>
<option value="1">second</option>
<option value="2">third</option>
Run Code Online (Sandbox Code Playgroud)
赞美Matz等人.
| 归档时间: |
|
| 查看次数: |
18899 次 |
| 最近记录: |