私は、インストラクターがそれぞれの学校の範囲内で教室を管理できる学校システムを構築しています。
一致する次の能力設定があります。
class Ability
include CanCan::Ability
#define the user ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.has_role? :instructor
can :manage, Classroom do |classroom|
classroom.new_record? && classroom.school_id == user.school_id || classroom.instructor == user
end
end
end
end
理論的には、これにより、インストラクターと新しい教室の両方が同じ学校に属している限り、インストラクターは、インストラクターの設定とは関係のない新しいレコードを管理できるようになります。
私の教室の新しいアクションでは、これに対応するために親学校から教室を構築し@classroom = @school.classrooms.build
ます。これにより、新しいClassroomレコードがschool_idで初期化され、インストラクターがレコードを管理できるようになります。ただし、私の教室のコントローラーではload_and_authorize_resource
、学校と教室の関係が確立され、CanCan承認例外がスローされる前に、インストラクターを承認するように呼び出します。
これを回避する方法はありますか?