2013-02-27 4 views
1

리소스가 깊이 중첩 될 때 abilites를 정의하는 데 문제가 있습니다. 나는이 수업이 : 나는 교사가 속한 만 학생들을 관리 할 수 ​​있도록 할 때CanCan, 깊이 중첩 된 리소스로 abilites 정의하기

#Teacher 
has_many :divisions 

#Division 
belongs_to :teacher 

#Student 
belongs_to :division 
has_many :absences 

#Absence 
belongs_to :student 

아무 문제가 없습니다 : 교사, 부문, 학생, 부재 및 사용자 (교사와 학생은 사용자 모델을 고안에 속하는) 그의 부문 :

#This doesn't work and returns PG::Error: ERROR: column students.divisions does not exist 
can :manage, Absence, student: { division: { teacher_id: user.teacher.id } } 

모든 sugge을 : 나는 교사가 자신의 부서에서 학생들에 속하는 결석을 관리 할 수 ​​있도록 할 때

#This works 
if user.teacher? 
    can :manage, Student, division: { teacher_id: user.teacher.id } 
end 

문제가 발생했을 이 중첩 된 리소스에 대한 능력을 정의하기위한 스틴?

답변

2

이 작동합니다 :

if user.teacher? 
    can :manage, Absence do |absence| 
    absence.student.division.teacher_id == user.teacher.id 
    end 
end 

캉캉 위키 : 나는 블록을 사용하지 않고 그것을 해결할 수있는 기대했다 Defining Abilities with Blocks

+0

. 나는 그렇지 않다. – h00s

관련 문제