我们有一个表单,可以在我们的views / restaurants / show.html.erb中的某个餐厅提交评分。我们只希望登录用户创建新的评级。我们把
before_filter:login_required,:only => [:new,:create]
(但我们也只在我们的RatingsController上尝试了“:create”)。如果我们在输入评级详细信息后单击提交按钮,系统会提示您登录(这就是我们想要的)。填写用户名和密码并提交登录表单后,我们将重定向回e。 G。 / restaurants / 36 /评级,但我们希望被重定向回我们来自的地方 - e。 G。 /餐厅/ 36 /。我们尝试了redirect_to(:back),但是这会将我们重定向回登录表单。此新评级也不会保存到数据库中。
知道我们如何更改重定向以及如何确保评级得到保存?
谢谢!
答案 0 :(得分:1)
免责声明:我不使用restful-authentication
。 (如果你有一个选择,你可以查看authlogic
- 如果你想要一个介绍,那就有一个Railscast about it。)即便如此,在会话中存储“后退”值仍然可以解决。这就是我在我的情况下做的事情:
# app/controllers/application.rb
before_filter :authorize
protected
# Override in controller classes that should NOT require authentication (such as logging in, by definition)
def require_login?
return true
end
private
def authorize
if require_login? && current_user.nil?
session['return_to'] = request.request_uri
redirect_to login_url
return false
end
end
# app/controllers/user_sessions_controller.rb
def create
# [...]
if @user_session.save
flash[:notice] = 'Successfully logged in.'
if session['return_to'].nil?
redirect_to root_url
else
redirect_to session['return_to']
end
else
render :action => 'new'
end
end
# app/controllers/users_controller.rb
# Just as an example:
def require_login?
return case action_name
when 'new'
false
when 'create'
false
else
true
end
end
我的应用程序几乎需要每个操作都需要身份验证,这就是我require_login?
返回true
的原因。我认为您可以根据需要调整session['return_to']
想法。
我想我从这篇文章中得到了这个想法的一部分:http://www.urubatan.info/2007/10/a-very-simple-login-example-with-rails/