Rails 3 - 在sign_in之后设计重定向到形式

时间:2011-04-18 15:09:12

标签: ruby-on-rails ruby-on-rails-3 devise warden

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

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

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

我怎么能在用户签名后将其重定向到评论表并填写所有字段?

提前致谢

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

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

这可能是最合理的解决方案,还有一个包含CanCan的解决方案(我推荐使用)

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

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