检查Rails中重定向的URL类型

时间:2013-08-25 08:00:18

标签: ruby-on-rails

使用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}再次。

如何检测/loginrequest.url是否来自request.referrer操作,它只会存储edit

我正在考虑使用正则表达式来检查ID之后的/places/2字,但可能会有更简洁的方法。

1 个答案:

答案 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