CanCan,用深度嵌套的资源定义能力

时间:2013-02-27 18:22:56

标签: ruby-on-rails-3 cancan

我在资源深度嵌套时定义abilites有问题。我有这些课程:教师,分部,学生,缺勤和用户(教师和学生属于Devise用户模型):

#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

当我想确保教师可以管理来自其部门的学生缺勤时出现问题:

#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 } }

有关定义此嵌套资源的能力的任何建议吗?

1 个答案:

答案 0 :(得分:2)

这应该有效:

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

康康威基:Defining Abilities with Blocks