关于Rails 3中的collection_select助手,我有一个简单的问题。
我想创建一个下拉字段,用户可以从列表中选择一个国家/地区。
我的代码目前看起来像这样:
<%= collection_select(:country,:id,SyncedCountry.order('name ASC'),:name,:name,{},{:class => "input-xlarge"}) %>
当我在页面上提交时,我在国家的参数中看到类似的内容:
"country"=>{"id"=>"Antilles"}
我真正想要的是在下拉列表中选择的国家/地区的ID,而不是哈希格式。所以结果更像是:
“国家”=&GT; 1(所选国家的ID)
有什么想法吗?
答案 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)
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"}) %>