使用Active Admin分配新的多态关联

最后发布: 2014-01-12 19:55:35


问题

我正在尝试修改我的活动admin用户表单以修改用户角色。 角色是通过role_assignments表的多态关联。

提交表单时,角色不会更新,我想是因为关联的属性受到保护,而且我没有以正确的方式使用allow_params。

ActiveAdmin.register User do
  permit_params :email, :newsletter_subscription, :password, :password_confirmation,
                role_assignment_attributes: [:role_id, :user_id, :_destroy, :_create]
  ...
end

有任何想法吗? 附加信息:

架构:

create_table "role_assignments", force: true do |t|
  t.integer  "role_id"
  t.integer  "user_id"
  t.datetime "created_at"
  t.datetime "updated_at"
end

这些类很简单:

class RoleAssignment < ActiveRecord::Base
  belongs_to :user
  belongs_to :role
end

class Role < ActiveRecord::Base
  has_many :role_assignments
  has_many :users, through: :role_assignments
  belongs_to :user
end

这样可以找到工作,并且为我提供了一个很好的形式来修改角色。 用户的有效管理表单:

form do |f|
  f.inputs "Admin Details" do
    f.input :email
    f.input :newsletter_subscription, :as => :radio
    f.input :roles, :as => :check_boxes
  end
end

但是,当我提交表格时,没有任何分配。

ruby-on-rails forms ruby-on-rails-4 activeadmin
回答

文档所示 ,您需要在:role_assignment_attributes :id作为允许的参数:role_assignment_attributes

permit_params :email, :newsletter_subscription, :password, :password_confirmation,
              role_assignment_attributes: [:id, :role_id, :user_id, :_destroy]

请注意,我删除了:_create参数,因为我从未见过类似的东西,因此我假设它是无意添加的。