我已经找到了解决我的问题的方法,但我仍然不明白为什么会出现这个问题。我想我错过了一些关于内部如何工作的东西。
我正在从几个控制器调用 *check_modify_rights* 方法,并且我想要一个具有适当名称的变量(@post 用于 post_controller 而不是通用变量,如 @object)
所以在 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