2011-04-18 36 views
2

在博客應用程序中,我希望每個用戶都可以訪問表單以發表評論。Rails 3 - 在sign_in後設計重定向形式

當用戶提交他被重定向到設計sign_in形式,如果沒有登錄評論表單。

before_filter :authenticate_user!, :except => [:index, :show, :new] 

我怎麼可能,一旦用戶sign_in,重定向他的評論表單並填寫所有領域?

在此先感謝

回答

4

如果你想利用用戶在每一個符號後發表評論的形式,加入的ApplicationController:

#after_sign_in_path_for is called by devise 
def after_sign_in_path_for(resource_or_scope) 
    comment_path... 
end 

如果你想利用用戶返回到他們在登錄之前的頁面,你可以保存電流控制器+會話的行動和重定向回:

session[:pre_login_controller] = params[:controller] 
session[:pre_login_action] = params[:action] 

然後:

def after_sign_in_path_for(resource_or_scope) 
    if session[:pre_login_controller] && session[:pre_login_action] 
    "#{session[:pre_login_controller]}/#{session[:pre_login_action]}" 
    else 
    some default path -- root url or comment path etc 
    end 
end 
+0

我混你的S解決方案和Warden :: Manager.before_failure,它非常棒! – invaino 2011-04-20 08:13:34

2

有多種解決方案,強調對堆棧溢出的設計登錄後重定向到以前的URL。

這可能是最合理的解決方案,並且也包括康康舞(我建議使用)溶液

Rails: Warden/Devise - How to capture the url before login/failed access

至於在表格填充,我想一個簡單的解決辦法是首先限制評論框。檢查用戶是否登錄(我認爲在設計它的user_signed_in?),如果user_signed_in?其他「你必須link_to登錄才能發表評論」。如果您在諸如#new之類的操作中收到評論,則可以通過設計限制整個新操作。爲此,請除去您的:認證中的新內容'除外'。