2013-05-10 1 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)을 실행하면

, 그것을 작동합니다.

나는 roles_users_attributes에 roles_user_attributes에게 & roles_attributes을 & role_attributes을 변경하려고하지만 문제가 해결되지 않았다.

나는이 주제에 대한 질문을 많이 읽을 수 있지만 해결책은 나를 위해 일하지 않는다. 이유를 모르시겠습니까? 그러나 나는 꽤 혼란 스럽다.

미리 감사드립니다.

답변

0

은 당신이 여기서하는 일은 정말 accepts_nested_attributes_for의 일이 아니다 - 그것은을 위해 사용되는 물건의 종류의 "중첩 된 형태"를 검색합니다. 이 물건에 대해 걱정하지 않고 user.roles << my_role을 할 수 있어야합니다.

편집 :이 옵션을 선택하지 않습니다 경우 단지 attr_accessible :role을 추가하는 것은 그것을해야한다.

+0

조인 테이블의 속성을 저장해야합니까? 예에서 언급 한 활성 속성과 같습니다. thx – adysson

+0

활성 속성은 무엇을합니까? 만약 특별한 역할을하는 하나의 역할을 의미한다면, 나는 active_role_id에 대한 사용자 모델에 여분의 컬럼을 추가하고'사용자 belongs_to active_role'을 가질 것을 고려할 것이다. – RobHeaton

+0

'active'는 놓아야 할 속성의 종류이다. attr_accessible'에 role_id' : role' 다음 당신이해야 당신이'attr_accessible을 변경하면이 경우에 - (하지 사용자 또는 역할 테이블) DB에 테이블을 조인, 제법 각 사용자 – adysson

관련 문제