我正在通过Hartl的教程学习rails,但是我可以使用第9.2.3章Link来工作
本节前的所有内容在本节之前都完美运行,但在到达此处后,如果我访问/ users / 1 /编辑并使用不同或相同的用户登录,则会重定向回用户页面而不是编辑页面。
会议助手:def redirect_back_or(default)
redirect_to(session[:return_to] || default)
session.delete(:return_to)
end
def store_location
session[:return_to] = request.fullpath
end
before_filter的用户控制器方法
private
def signed_in_user
unless signed_in?
store_location
redirect_to signin_path, notice: "Please sign in."
end
end
def correct_user
@user = User.find(params[:id])
redirect_to(root_path) unless current_user?(@user)
end
在用户控制器中的过滤器之前
before_filter :signed_in_user,only:[:edit,:update,:index]
before_filter :correct_user, only:[:edit,:update]
到目前为止我的代码Github
答案 0 :(得分:2)
您错过了在SessionsController创建中调用redirect_back_or用户而不是redirect_to:
def create
user = User.find_by_email(params[:session][:email])
if user && user.authenticate(params[:session][:password])
sign_in user
redirect_back_or user
else
flash.now[:error] = 'Invalid email/password combination' # Not quite right!
render 'new'
end
end
我通过将会话添加到页面底部的调试信息中找到了,并且在成功登录后return_to仍然存在:
{"session_id"=>"4dcc1baaf651aaab953026902b32f805", "_csrf_token"=>"0YkP+yd/DDuInX4kIBkjwbzxV1GK0oYBDAXEiWnHLGs=", "return_to"=>"/users/1/edit"}