2011-04-18 35 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之类的操作中收到评论,则可以通过设计限制整个新操作。为此,请除去您的:认证中的新内容'除外'。