Rails 3中的集合选择助手

时间:2014-03-06 13:39:29

标签: ruby-on-rails ruby helper

关于Rails 3中的collection_select助手,我有一个简单的问题。

我想创建一个下拉字段,用户可以从列表中选择一个国家/地区。

我的代码目前看起来像这样:

<%= collection_select(:country,:id,SyncedCountry.order('name ASC'),:name,:name,{},{:class => "input-xlarge"}) %>

当我在页面上提交时,我在国家的参数中看到类似的内容:

"country"=>{"id"=>"Antilles"}

我真正想要的是在下拉列表中选择的国家/地区的ID,而不是哈希格式。所以结果更像是:

“国家”=&GT; 1(所选国家的ID)

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

替换

<%= collection_select(:country,:id,SyncedCountry.order('name ASC'),:name,:name,{},{:class => "input-xlarge"}) %>

<%= collection_select(:model_object,:country,SyncedCountry.order('name ASC'),:name,:name,{},{:class => "input-xlarge"}) %>

其中model_object是传递给表单的对象。如果它是user的表单,并且您的表单看起来像form_for(@user),请将:model_object替换为:user

因此,params看起来像"user"=>{"country"=>"Antilles"},假设您正在为用户设置国家/地区。

答案 1 :(得分:0)

来自documentation

  

collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {}) public   ...

     

:value_method:text_method参数是要调用的方法   在每个集合成员。返回值用作值   每个<option>标记的属性和内容。他们能   也可以是响应调用的任何对象,例如proc   要求集合的每个成员检索值/文本。

所以试试:

<%= collection_select(:country,:id,SyncedCountry.order('name ASC'),:id,:name,{},{:class => "input-xlarge"}) %>

文档中的示例如下所示:

  

示例用法(为Author的实例选择关联的Post,   @post):

collection_select(:post, :author_id, Author.all, :id,
  :name_with_initial, prompt: true)
     

如果@post.author_id已经1,则会返回:

<select name="post[author_id]">
  <option value="">Please select</option>
  <option value="1" selected="selected">D. Heinemeier Hansson</option>
  <option value="2">D. Thomas</option>
  <option value="3">M. Clark</option>
</select>

(这将返回“author_id”=&gt;“1”)

现在,我对您的模型并不熟悉,但如果您选择的是用户所在的国家/地区,那么我认为这应该可行:

    <%= collection_select(:user, :country_id,SyncedCountry.order('name ASC'),:id,:name,{},{:class => "input-xlarge"}) %>