使用方法:使用grouped_collection_select选择

时间:2012-08-05 15:09:05

标签: ruby-on-rails ruby-on-rails-3 validation grouped-collection-select

是否有可能以某种方式使用:selected选项,您可以在带有grouped_collection_select函数的普通选择视图助手上使用?我想设置在我的列表中预先选择的值。我试过传递:选择没有运气的选项!

以下是我测试的一些代码信息:

grouped_collection_select 'user[subscription_attributes]', :subscription_plan_id, Trade.order(:name).all, :subscription_plans, :name, :id, :display_name, { :include_blank => true, :selected => 5 }

grouped_collection_select 'user[subscription_attributes]', :subscription_plan_id, Trade.order(:name).all, :subscription_plans, :name, :id, :display_name, :include_blank => true, :selected => 5 

这两个版本都无效。没有选择设置。我正在使用它为嵌套模型设置一个值。我正在使用railscasts动态选择列表方法:http://railscasts.com/episodes/88-dynamic-select-menus-revised

我无法使用formtastic与组选择很好地玩,所以我必须手动完成,但是当用户验证失败时我不会保留此值。我想在修复验证错误时保留此设置。

3 个答案:

答案 0 :(得分:9)

我遇到了同样的问题,并使用option_groups_from_collection_for_select helperselect帮助文件解决了问题:<{3}}。

第一步是创建分组选项。举个例子,看起来应该是这样的:

<% options = option_groups_from_collection_for_select(Trade.order(:name).all,
   :subscription_plans, :name, :id, :display_name, 5) %>

然后我创建了选择对象,如:

<%= select('user[subscription_attributes]', :subscription_plan_id, options, 
  include_blank: true) %>

你可以在一行中写出来,我只是将选项分成一个单独的变量来说明两种不同的方法。

答案 1 :(得分:1)

也许为时已晚,但groups_collection_select的API文档指出: '将从实例对象的调用方法返回的值被选中。'

因此,您甚至不必指定:selected选项,因为Rails将根据您的属性的当前值自动选择。 如果subscription_plan_id的值为5,则表示将选择该值。

如果这应该是默认值,那么您可以在模型中使用after_initialize进行设置。

答案 2 :(得分:0)

实际上你需要发送选项include_blank,例如

<%= grouped_collection_select :id, model.all, options = {:include_blank => 'Selecione'}%>