0

使用 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,然后/login再次重定向到。

我如何检测request.urlorrequest.referrer是否来自edit动作,它只会存储/places/2唯一的?

我正在考虑使用正则表达式来检查editID 后的单词,但可能有更简洁的方法。

4

1 回答 1

1

如果您确实需要能够在 request.referrer 上检查此类内容,则正则表达式可能是一个不错的选择:

request.url.gsub(/\/edit$/,'')

但是,如果您实际上来自编辑操作,则您的 session[: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
于 2013-08-25T12:24:41.453 回答