2013-05-10 2 views
0

У меня есть эти модели:рельсов HAS_MANY через не может создать объект ассоциации

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).

Я попытался изменить role_user_attributes & role_attributes на role_users_attributes & role_attributes, но это не решило проблему.

Я прочитал много вопросов по этой теме, но никакое решение не работало для меня. Разве вы не знаете, почему? Но я совершенно смущен.

Заранее благодарен!

ответ

0

Что вы здесь делаете, это не работа для accepts_nested_attributes_for - поиск «вложенных форм» для тех видов, для которых он используется. Вы должны просто быть в состоянии сделать user.roles << my_role, не беспокоясь об этом.

EDIT: Если это не вариант, просто нужно добавить attr_accessible :role.

+0

, даже если мне нужен атрибут в таблице соединений для сохранения? как активный атрибут, упомянутый в примере. thx – adysson

+0

Что делает активный атрибут? Если он предназначен для обозначения отдельной роли, имеющей особый статус, я бы подумал о добавлении в дополнительный столбец в пользовательской модели для 'active_role_id' и имеет' user принадлежит_to active_role' – RobHeaton

+0

'active' является своего рода атрибутом, который должен быть размещен В таблице объединений в БД (не в таблице пользователей или ролей) может быть много «активных» ролей для каждого пользователя. – adysson

Смежные вопросы