在一个博客应用程序中,我希望每个用户都能访问一个表单来发表评论。
当用户提交评论表单时,如果没有登录,他将被重定向到design sign_in表单。
before_filter :authenticate_user!, :except => [:index, :show, :new]
我如何在用户登录后,将他重定向到评论表单并填写所有字段?
Thanks in advance
如果你想在每次登录后使用用户评论表单,添加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上突出显示了多个解决方案,用于在登录后重定向到以前的URL。
这可能是最合乎逻辑的解决方案,还有一个解决方案包括CanCan(我推荐使用)
Rails: Warden/design -如何在登录/访问失败前捕获url
对于表单的填写,我认为一个简单的解决方案是首先限制评论框。检查用户是否登录(我认为在设计它的user_signed_in?),如果user_signed_in?否则"您必须link_to登录才能评论"。如果在#new等操作中有注释,则可以通过设计限制整个新操作。为此,删除身份验证'except'中的:new。