2017-04-19 168 views
0

我有这样的代码多选择在轨嵌套属性4

class Department < ActiveRecord::Base 
    has_many :admin_permissions 
    accepts_nested_attributes_for :admin_permissions 
end 

查看:

= ep.fields_for :department, dept_object do |dept| 
    = dept.fields_for :admin_permissions, @user.admin_permissions.new(department: dept.object) do |ap| 
     = ap.collection_select :permission_type, AdminPermission.permission_types.map{ |dp| [dp.first, dp.first.humanize] }, :first, :second, {}, { :multiple => true, class: 'form-control' } 

但在提交按钮被按下后的参数,可以在PARAMS是这样的:

"department_attributes"=> 
    {"company_id"=>"2", 
    "name"=>"", 
    "admin_permissions_attributes"=>{"0"=>{"permission_type"=>["", "human_resource"]}}}, 

而不是

"department_attributes"=> 
    {"company_id"=>"2", 
    "name"=>"", 
    "admin_permissions_attributes"=>{"0"=>{"permission_type"=>"hr"}, "1" => {"permission_type" => "manager"}}} 

我怎样才能实现这与多选择?谢谢!

回答

0

你的语法看起来是正确的,但你可以尝试删除:多出来的括号

ap.collection_select :permission_type, AdminPermission.permission_types.map{ |dp| [dp.first, dp.first.humanize] }, :first, :second, {}, :multiple => true

,但结果总是会在形式

"admin_permissions_attributes"=>{"0"=>{"permission_type"=>["", "human_resource", "management"]}}}

他们将不会有他们自己的ID,但会作为列表传递。

+0

是否会创建单独的对象? – user3620046

+0

不,我想你必须自己在控制器中执行update_attribute调用。但我不确定这可以与你的符号一起工作。与嵌套属性的关系是什么类型?你确实想为每个传入的选择创建一个新的,而不仅仅是像has_and_belongs_to_many关系那样传递和关联,对吗? – talkingfox