使用Rails 3.2。我的应用程序中有以下内容:
# application_controller.rb
def store_location
session[:return_to] = request.url
end
def store_referrer_location
session[:return_to] = request.referrer
end
# user_sessions_controller.rb
def destroy
store_referrer_location if session[:return_to].blank?
current_user_session.destroy
flash[:success] = "Logout successful!"
redirect_back_or_default root_url
end
如果我在/places/2/edit
,则点击退出,session[:return_to]
会存储/places/2/edit
并尝试重定向回/places/2/edit
,然后重定向到{{1}再次。
如何检测/login
或request.url
是否来自request.referrer
操作,它只会存储edit
?
我正在考虑使用正则表达式来检查ID之后的/places/2
字,但可能会有更简洁的方法。
答案 0 :(得分:1)
如果你真的需要能够在request.referrer上检查这样的东西,那么正则表达式可能是个不错的选择:
request.url.gsub(/\/edit$/,'')
但是如果您实际上来自编辑操作,则您的会话[:return_to]不应为空,因为您应该在编辑操作中调用store_location。
在这种情况下,您不需要检查request.referrer,并且,正如Bigxiang建议您可以更改store_location方法,使其在您进行编辑操作时仅存储显示路径
实施例
# application_controller.rb
def store_location
session[:return_to] = action_name == 'edit' ? url_for(action:'show') : request.url
end