0

我已经找到了解决我的问题的方法,但我仍然不明白为什么会出现这个问题。我想我错过了一些关于内部如何工作的东西。

我正在从几个控制器调用 *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
4

1 回答 1

1

显然@post = Post.new将具有与新实例化对象不同的 id。

要检索新对象,您可以:

1)使用通用实例变量:@resource = Post.new

2) 或:

# in your before filter
@post = f.check_modify_rights @post
# in application controller
return obj if obj.user.id == @user.id or @user.is_admin?

但基本上,你正在重做康康舞,我不推荐。

于 2012-12-30T18:25:23.540 回答