2009-04-07 3 views
7

나는 레일 2.3이 신기한 것을 좋아하는 중첩 된 형태의 기능을 가지고 주어진,이에 대한 간단한 해결책이되었습니다해야한다고 생각했다. 기본적으로 내가 만들거나 사용자를 업데이트하고 동시에 그들에게 역할을 지정합니다.중첩 된 객체 체크 박스/w -도 accepts_nested_attributes_for와 대량 할당?

모든 것을 올바르게하고있는 것처럼 보이지만 오류가 발생합니다. 경고 : 다음 보호 속성을 할당 할 수 없습니다 : roles_attrributes. 나는 어쩌면 조인 테이블이 혼란 레일이라고 생각했기 때문에

나는 심지어 사용자 [permissions_attrributes] [ROLE_ID]로보기를 변경했습니다.

어쨌든,이 실제로 작동하는 방법에 대한 어떤 제안?

는 모델

class User < ActiveRecord::Base 

    has_many :permissions 
    has_many :roles, :through => :permissions 

    accepts_nested_attributes_for :roles 
    accepts_nested_attributes_for :permissions 
end 

보기에서 발췌 (내가 노력하고 내가 여기에 원하는 생성 fields_for를 가져 오지 못했습니다 발견, 어쩌면 그건 내 문제 야?)

<% for role in Role.all %> 
<%= check_box_tag("user[roles_attrributes][id]",role.id) %> 
<%= role.rolename %> 
<br/> 
<% end %> 

에 Params가 건너 오는 것 같다 오른쪽 :

{"user"=>{"password_confirmation"=>"[FILTERED]", 
"roles_attrributes"=>{"id"=>"2"}, ... 

솔루션 attr_accessible을 사용하지 않고, permission_attributes에 액세스해야하며, 양식이 약간 벗어난 철자의 조합.

모델 :

has_many :permissions, :dependent => :destroy 
has_many :roles, :through => :permissions 
accepts_nested_attributes_for :permissions 
attr_accessible :permissions_attributes 

보기 :

<% Role.all(:order => "rolename ASC").each_with_index do |role,idx| %> 
    <%= check_box_tag("user[permissions_attributes][#{idx}][role_id]",role.id) %> 
    <%= role.rolename %> 
    <br/> 
    <% end %> 

답변

3

이 속성이 업데이트에 대한 안전 표시되지 않은 것처럼 들린다. 당신은 당신의 모델 클래스에 다음을 추가하여 문제를 해결 할 수 있어야한다 : 아마도

attr_accessible :roles 

나 :

당신이 보는 경우
attr_accessible :roles_attributes 

, 당신은 이미 당신이 추가 할 수 있습니다 부르는 attr_accessible을 가질 수있다. 자세한 내용은이 여기에 설명되어 있습니다 :

http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M002226

+0

accepts_nested_attributes_for에는이 기능이 필요하지 않습니다. 어쨌든, 나는 둘 다 시도하고 둘 다 노력하지 않았다. – Bill

+0

해당 오류 메시지는 확실히 attr_protected 또는 attr_accessible 문제로 인해 발생하는 오류 메시지입니다. 또한 http://apidock.com/rails/ActiveRecord/NestedAttributes/ClassMethods/accepts_nested_attributes_for는 ANAF에서도 인식해야 할 부분임을 나타냅니다. 아마도 더 자세히 볼 가치가 있을까요? –

5

당신이 당신의 에 속성의 철자를 수정하면 작동합니다 것 같습니다.

<% for role in Role.all %> 
<%= check_box_tag("user[roles_attributes][id]",role.id) %> 
<%= role.rolename %> 
<br/> 
<% end %> 
+0

좋은 캐치! 그 이유는 속성이 인식되지 않는 이유를 설명 할 것입니다 =) –

관련 문제