Ruby on rails Rails 3中的集合选择帮助器

Ruby on rails Rails 3中的集合选择帮助器,ruby-on-rails,ruby,helper,Ruby On Rails,Ruby,Helper,我有一个关于Rails 3中的collection_select helper的快速问题 我想创建一个下拉字段,用户可以从列表中选择一个国家 我的代码当前看起来像这样: <%= collection_select(:country,:id,SyncedCountry.order('name ASC'),:name,:name,{},{:class => "input-xlarge"}) %> 我真正想要的是下拉列表中所选国家的id,而不是散列格式。所以结果更像是: “国家”=

我有一个关于Rails 3中的collection_select helper的快速问题

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

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

<%= collection_select(:country,:id,SyncedCountry.order('name ASC'),:name,:name,{},{:class => "input-xlarge"}) %>
我真正想要的是下拉列表中所选国家的id,而不是散列格式。所以结果更像是:

“国家”=>1(所选国家的id)

有什么想法吗

来自:

collection\u select(object、method、collection、value\u method、text\u method、options={}、html\u options={})public

:value\u方法
:text\u方法
参数是要调用的方法 在集合的每个成员上。返回值用作值 每个
标记的属性和内容。他们可以 也可以是响应调用的任何对象,例如proc,它将 为集合的每个成员调用以检索值/文本

因此,请尝试:

<%= collection_select(:country,:id,SyncedCountry.order('name ASC'),:id,:name,{},{:class => "input-xlarge"}) %>
如果
@post.author\u 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>

请选择
海涅迈尔·汉森博士
D.托马斯
克拉克先生
(这将返回“author_id”=>“1”)

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

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

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

“input xlarge”})%>
其中
model\u object
是传递给表单的对象。如果它是
用户的表单
,并且您的表单看起来像(@user)的
表单,则将
:model\u object
替换为
:user


因此,param看起来像
“user”=>{“country”=>“antiles”}
,假设您正在为用户设置country。

这很有效,但是param看起来像这样:
country”=>{“id”=>“1”}
无论如何都不能将param作为散列传递,所以我只获取id,即“country”=>1。
    <%= collection_select(:user, :country_id,SyncedCountry.order('name ASC'),:id,:name,{},{:class => "input-xlarge"}) %>
<%= 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"}) %>