rails has_many through无法创建对象关联

时间:2013-05-10 19:12:06

标签: ruby-on-rails has-many-through

我有这些模特:

class User < ActiveRecord::Base
  attr_accessible :email, :name, :roles_user_attributes

  has_many :roles_users
  has_many :roles, through: :roles_users

  accepts_nested_attributes_for :roles_users, reject_if: :all_blank, allow_destroy: true
  accepts_nested_attributes_for :roles
end

class Role < ActiveRecord::Base
  attr_accessible :name, :user_id

  has_many :roles_users
  has_many :users, through: :roles_users
end

class RolesUser < ActiveRecord::Base
  attr_accessible :active, :role_id, :user_id, :role_attributes

  belongs_to :user
  belongs_to :role

  accepts_nested_attributes_for :role, reject_if: :all_blank
end

当我跑步时:

my_role = Role.find(1)
user = User.find(1)
user.roles_users.create(active: 1, role: my_role)

我收到错误Can't mass-assign protected attributes: role

当我运行user.roles_users.create(active: 1, role_id: 1)时,它会起作用。

我尝试更改roles_user_attributes&amp; role_attributes到roles_users_attributes&amp; roles_attributes,但它没有解决问题。

我读了很多关于这个主题的问题,但没有解决方案适合我。 你不知道为什么吗?但我很困惑。

提前致谢!

1 个答案:

答案 0 :(得分:0)

你在这里所做的并不是accepts_nested_attributes_for的工作 - 搜索“嵌套表格”用于它所用的各种事物。你应该能够user.roles << my_role而不用担心这些事情。

编辑:如果这不是一个选项,那么只需添加attr_accessible :role即可。