Ruby on rails 如何强制用户登录某个操作,然后在以后执行该操作

Ruby on rails 如何强制用户登录某个操作,然后在以后执行该操作,ruby-on-rails,login,filter,Ruby On Rails,Login,Filter,我试图在用户在我的文章控制器中调用此更新操作后强制用户登录(我尝试逐步参与),但一旦用户登录,我仍然希望调用此操作,而不是停止 def update @article.attributes = params[:article] @article.save #store this article as a session variable session[:pending_article] = @article.body respond_with(@a

我试图在用户在我的文章控制器中调用此更新操作后强制用户登录(我尝试逐步参与),但一旦用户登录,我仍然希望调用此操作,而不是停止

 def update
    @article.attributes = params[:article]
    @article.save

    #store this article as a session variable
    session[:pending_article] = @article.body

    respond_with(@article, :location => article_url(@article))
  end
现在,我正在对需要用户登录的操作使用before_过滤器

 def require_user
    unless current_user
      store_location
      flash[:notice] = "You must be logged in to access this page"
      redirect_to login_url
      return false
    end
  end

但是,我知道,在过滤器重定向后会停止原始操作之前,永远不会调用update。基本上,我希望用户登录以保存文章,但我希望保存他们的工作,因此我将文章正文存储在会话变量中,稍后我将获取该变量。有没有更好的方法可以要求用户登录某个操作,但之后再调用它?

在require\u user方法中,您可以执行以下操作:

session[:article] = params[:article]
然后在登录方法(/sessions/create?)中执行以下操作:

然后在文章中,控制器是新的

然后会话中保存的文章参数仍然存在,因此表单是预先填写的


不过,要小心在会话中存储太多内容。在Rails中,默认的会话存储是cookie,cookie只保存大约4k的数据。您可能需要更改会话存储以完成此操作。

在require\u user方法中保存会话变量只是一个问题。谢谢
# this should take you back /articles/new,
# you may have to move your call to store_location 
# or manually set session[:return_to]
redirect_back_or_default 
def new
  @article = Article.new(session[:article] || {})
end