我有一个控制器,其路由定义为:
resources :items, except: [:new, :edit]
并且控制器中未定义new
和edit
操作。
当我浏览到/items/new
时,我从数据库中收到一条错误消息,说明找不到该项目。
参数包含{"id"=>"new"}
,据我所知,路径的new
部分被解释为id。
如何让/items/new
路由失败?
答案 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