0

我正在设置session[:return_to]很多路线,以将用户带回以前的位置。我正在尝试创建一个通用检查器以确保链接有效,而不是格式,(http://somevalidurl)我不在乎,但实际链接存在。

主要问题是当他们在一个show页面上然后转到该edit页面并删除一个条目时,return_to将它们带回show页面并且我们得到一个路由错误,因为该条目不再存在。

我认为 Rails 有某种系统来解决这个问题。

我有这样的事情:

Net::HTTP.get_response(URI.parse(session[:return_to])) rescue false

但这需要很长时间才能检查,并且页面最终需要很长时间才能刷新。

欢迎提出想法。

4

1 回答 1

1

检查以前的 url 是否有效是不必要的,因为这种情况不是使用您的应用程序的常见途径。他们只是例外。您只需要在发生异常时制定计划,而不是在每个常见的路线上处理它。

简单的解决方案:重定向到根

class ApplicationController
  rescue_from ActiveRecord::RecordNotFound, with: :record_not_found

  private
  def record_not_found
    redirect_to root_path, alert: "The record does not exist"
  end
end

高级解决方案:重定向到控制器的索引页面

class ApplicationController
  rescue_from ActiveRecord::RecordNotFound do |exception|
    # The message like: "Couldn't find foo with id=123"
    klass = exception.message.split(' ')[2]
    if klass
       # suppose your index path is conventional foos_path
       path = send "#{klass.pluralize.underscore}_path"
    else
       path = root_path
    end
    redirect_to path
  end
end
于 2013-09-10T15:51:16.450 回答