我在routes.rb
:
resources :emergencies, except: [:new, :edit, :destroy], defaults: { format: :json }
match '*path', to: 'application#page_not_found', via: :all
我也在application.rb
:
config.exceptions_app = self.routes
我的application_controller.rb
看起来像这样:
class ApplicationController < ActionController::Base
def page_not_found
render json: { message: 'page not found' }, status: :not_found
end
end
我有一组测试套件可以测试:new,:edit和:destroy route。以下路由:edit和:destroy pass,返回未按预期找到的消息页面,但:new route返回null
。事实上,/emergencies/anything
之类的任何内容都会呈现null,但/emergences/new/new
之类的内容会正常工作。任何关于为什么会发生这种情况的想法以及如何解决它以便路线/emergencies/new
正在进行page_not_found
行动?
答案 0 :(得分:1)
运行rake routes
以了解您的路线如何布局。
你会注意到show route匹配emergencies /:id(例如,这包括紧急情况/新)。
路线从上到下匹配。通常,资源在show route之前声明新路由,以捕获与未来声明匹配的内容。
如果可以,请为您的节目路线添加约束,如果不匹配该ID,则至少与新的不匹配。或者您可以保留资源路径并将它们踢到控制器中的before_filter中的page_not_found方法...
答案 1 :(得分:0)
我看到这已经有了上面的答案,但是当找不到路线时,所有301重定向实施都非常简单。在下面的示例中,找不到重定向到root的页面。
Rails.application.routes.draw do
root 'static_pages#home'
.
.
.
# This is a catchall 301 redirect to home (does not help with (e) type errors -- MUST BE LAST )
get "*path", to: redirect('/')
end