2013-02-27 2 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 works 
if user.teacher? 
    can :manage, Student, division: { teacher_id: user.teacher.id } 
end 

Проблема occurrs, когда я хочу, чтобы гарантировать, что Учитель может управлять Отсутствия, что принадлежит студентам из его подразделений:

#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 стили для определения способности для этих вложенных ресурсов?

ответ

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

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