使用options_from_collection_for_select

时间:2012-05-23 10:59:25

标签: ruby-on-rails

我正在尝试使用

options_from_collection_for_select(collection, value_method, text_method, selected = nil)

但我无法将适当的参数传递给它。应该在collection元素上输入什么内容? (完整使用的样本将有所帮助)

我必须使用Name=ALID=23这样的格式,就像国家名称和代码一样。

因此,我应该如何向它提供集合对象。

我尝试过使用HashMapArray

2 个答案:

答案 0 :(得分:2)

options_from_collection_for_select的第一个参数应该是一个任意集合(准确地使用map方法的任何对象),例如Array

Array Hash的示例:

options_from_collection_for_select([ { :id => 1, :name => 'Foo' }, { :id => 2, :name => 'Bar' } ], 'to_s', 'to_s')

当然这是一个愚蠢的例子,因为第二个参数是值的方法,第三个是名称的方法。因此,该方法会调用to_s项上的Hash方法来获取id的{​​{1}}和value,因此会生成:

<option/>

如果您提供适当的对象,例如'<option value="{:id=&gt;1, :name=&gt;&quot;Foo&quot;}">{:id=&gt;1, :name=&gt;&quot;Foo&quot;}</option>\n<option value="{:id=&gt;2, :name=&gt;&quot;Bar&quot;}">{:id=&gt;2, :name=&gt;&quot;Bar&quot;}</option>' 个对象:

ActiveRecord::Base

它会产生更好的输出:

options_from_collection_for_select(Article.all, 'id', 'title')

答案 1 :(得分:0)

我想,您可以尝试options_for_select。

options_for_select([text1, value1], [text2, value2]])