Rails 3 – 在sign_in之后设计重定向到forms

在博客应用中,我希望每个用户都可以访问表单来发表评论。

当用户提交评论表单时,如果未登录,则会将其重定向到Devise sign_in表单。

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

我怎么能一旦用户sign_in,将他重定向到评论表并填写所有字段?

提前致谢

如果您想在每次登录后将用户带到评论表单,请在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 

Stack Overflow上突出显示了多个解决方案,用于在Devise登录后重定向到以前的URL。

这可能是最合乎逻辑的解决方案,还有一个包含CanCan的解决方案(我建议使用)

Rails:Warden / Devise – 如何在登录/访问失败之前捕获URL

至于填写表格,我认为一个简单的解决方案是首先限制评论框。 检查用户是否已登录(我认为在Devise中是user_signed_in?)以及user_signed_in? 否则“你必须link_to登录才能发表评论”。 如果您在#new等操作中有注释,则可以通过设计限制整个新操作。 为此,摆脱你的:authentification’新’除了’。