为Active Admin分配新的多态关联

时间:2014-01-12 19:55:36

标签: ruby-on-rails forms ruby-on-rails-4 activeadmin

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

当我提交表单时,角色没有更新,我猜是因为关联的属性受到保护而且我没有正确使用permit_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

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

1 个答案:

答案 0 :(得分:1)

docs illustrate一样,您需要将:id作为:role_assignment_attributes内的允许参数传递

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

请注意,我删除了:_create param,因为我从未见过这样的内容,所以我假设它是无意中添加的。