私は非常に標準的な設定をしています。Identity::Member
ユーザーであり、それぞれProject::Project
がメンバーによって所有されています。認証と承認にDevise
と を一緒に使用します。Pundit
これが私のコードですProject::ProjectPolicy
class Project::ProjectPolicy < ApplicationPolicy
attr_reader :member, :project
def initialize(member, project)
@member = member
@project = project
end
...
def update?
member == project.member
end
def edit?
update?
end
...
end
そして、ここに私のedit
行動があります:
# GET /projects/1/edit
def edit
authorize @project_project
respond_with @project_project
end
最後に、レスキューのセットアップApplicationController
rescue_from Pundit::NotAuthorizedError, with: :member_not_authorized
def member_not_authorized
respond_with current_member, status: :unauthorized, location: -> { root_path }
end
しかし...何らかの理由で、編集をクリックすると編集ビューが表示されますが、すべての変更はブロックされ、ユーザーは更新と破棄のアクションを指示したのと同じように root_path にリダイレクトされます。なんで?