Rails /新路径被解释为ID

时间:2015-01-15 10:51:57

标签: ruby-on-rails rails-routing

我有一个控制器,其路由定义为:

resources :items, except: [:new, :edit]

并且控制器中未定义newedit操作。

当我浏览到/items/new时,我从数据库中收到一条错误消息,说明找不到该项目。

参数包含{"id"=>"new"},据我所知,路径的new部分被解释为id。

如何让/items/new路由失败?

2 个答案:

答案 0 :(得分:1)

您可以在路线的:id段上使用约束。

如果你知道你的id总是一个数字,请尝试使用:

resources :items, except: [:new, :edit], constraints: { id: /\d+/ }

这会阻止任何与/\d+/正则表达式(即一个或多个数字)不匹配的内容被视为id值,从而阻止路由匹配{{1} }

答案 1 :(得分:0)

您只需在控制器中执行此操作即可通过渲染视图来解除失败

 class ItemsController < ApplicationController
   rescue_from ActiveRecord::RecordNotFound, :with => :record_not_found

    def record_not_found
     render 'record_not_found'
     #do the other stuff
      true
    end
  end