2011-04-21 55 views
2

我試圖強制用戶在我的文章控制器中調用此更新動作時登錄(我正在嘗試逐步參與),但是一旦他們登錄,我想仍然稱這個動作而不是停止。如何強制用戶在某個動作上登錄並稍後執行

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 

現在我使用的是需要用戶的動作登錄

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 

然而一個的before_filter,據我所知,過濾器停止原來的動作,一旦他們重新定向之前,因此更新不會被調用。基本上,我想要一個用戶登錄來保存文章,但我想保存他們的工作,所以我將文章主體存儲在稍後抓取的會話變量中。有沒有更好的方法來要求用戶登錄進行操作,但是之後會調用它?

回答

2

在你require_user方法,你可以做這樣的事情:在ArticlesController#新

# 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 

然後:

session[:article] = params[:article] 

然後在您的登錄方法(?/會話/創建)做到這一點

def new 
    @article = Article.new(session[:article] || {}) 
end 

然後從會話中保存的文章參數仍然存在,所以表格被預先填寫。

雖然要小心地在會話中存儲太多的內容。在Rails中,默認的會話存儲是一個cookie,cookie只能保存大約4k的數據。您可能需要更改會話存儲以將其關閉。

+0

將會話變量保存在require_user方法中就是票證。謝謝! – Hirthy 2011-04-25 00:17:05

相關問題