1

リソースが深くネストされている場合、アビリティの定義に問題があります。私はこれらのクラスを持っています:Teacher、Division、Student、Absence、User(TeacherとStudentはDevise Userモデルに属しています):

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

このネストされたリソースの能力を定義するための提案はありますか?

4

1 に答える 1

2

これはうまくいくはずです:

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

cancan wiki:ブロックによる能力の定義

于 2013-04-14T16:33:52.087 に答える