【问题标题】:What's the ideal error to raise when the url entered by the user is incorrect?当用户输入的 url 不正确时引发的理想错误是什么?
【发布时间】:2010-11-11 05:48:50
【问题描述】:

我有一个基于 url 参数搜索记录的操作。该操作的 url 如下所示:

http://domain.com/records/filter/<filtercode>

如果用户输入了错误的过滤代码,我想应用到

  • 引发错误,以便Hoptoad 向我报告错误。
  • 在生产环境中渲染 404 而不是 500。

我了解某些 Rails 错误,例如 ActiveRecord::NotFound 和 ActionController:RoutingError 将在生产环境中呈现 404。所以我喜欢做的是当用户在 url 中输入无效的过滤器代码时引发此错误。

现在,我的问题是:在这种情况下提出的理想错误是什么?网络中是否有 Rails 错误/异常列表?

【问题讨论】:

标签: ruby-on-rails


【解决方案1】:

如果它搜索记录但没有找到任何合乎逻辑的方法是使用 ActiveRecord::NotFound 不是吗?

【讨论】:

  • 呈现 500 而不是 404
  • 您使用 404 状态码从 ActiveRecord::RecordNotFound (我认为这是例外)中解救出来。在某些方面,Google 是您的朋友。
【解决方案2】:

您应该发现 Rails 抛出的任何类型的错误,因为它们都不是面向用户的……当异常冒泡到 HTTP 响应时,它总是显示为 HTTP 500。

完全正常的做法是捕获异常并通过将 HTTP 状态设置为 404 来处理它,并输出您自己的错误,可能会说“我们搜索了这个,但没有找到任何东西”。或者,如果担心安全问题,只需用一种非常花哨的方式说“未找到”。

【讨论】:

    【解决方案3】:

    你在寻找

    ActionController::RoutingError
    

    我喜欢在我的 application_controller 中这样做:

      def not_found
        raise ActionController::RoutingError.new('Not Found')
      end
    

    然后在其他控制器中,例如 pages#show,我可以这样做:

    def show
      unless @page = Page.find_by_permalink(params[:permalink])
        not_found
      end
    end
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多