問題の回避策は既に見つかりましたが、この問題が発生する理由はまだわかりません。内部がどのように機能するかについて、いくつかのことが欠けていると思います。
いくつかのコントローラーから *check_modify_rights* メソッドを呼び出しています。適切な名前の変数が必要です (@object のような一般的なものではなく、post_controller の @post)。
そのため、before_filter を実行した後、Post モデルを持つ @post インスタンス変数が存在することを期待しています。しかし、私は新しい Post モデルを取得し (@post = Post.new のため)、メソッドで object_id をチェックすると、それらは異なります。
# post_controller
before_filter do |f|
@post = Post.new
f.check_modify_rights @post
end
# application_controller
def check_modify_rights(obj)
return redirect_to login_path, :notice => "Please login" unless @user
p obj.object_id
obj = obj.class.find(params[:id])
p obj.object_id
return if obj.user.id == @user.id or @user.is_admin?
redirect_to posts_path, :notice => "You don't have permission for this action"
end
end