在Rails 5 routes.rb中,我最终得到了一个:#/ p>
match "*path" => "static_pages#not_found", via: :all
与此操作相结合,可以很好地处理无用的网址,例如“/ bla”或“/bla.html”。但对于具有不同请求格式的现有路由,这不起作用。例如,我有工作网址“/ authors”,无用的“/authors.jpg”正在获取:
AuthorsController#index is missing a template for this request format and variant. request.formats: ["image/jpeg"] request.variant: []
关于开发和生产中的HTTP 406。
我希望我的not_found操作可以处理未处理的请求格式。什么是Rails 5方式捕获所有请求格式?
答案 0 :(得分:0)
您应该能够在路线中使用默认值来更严格地使用路线。我不相信这是http://guides.rubyonrails.org/routing.html#defining-defaults
的最佳选择defaults format: :html do
resources :authors
end
我认为更好的解决方案是rescue_from
http://api.rubyonrails.org/classes/ActiveSupport/Rescuable/ClassMethods.html#method-i-rescue_from
在ActionView::MissingTemplate
中使用rescue_from
。我可能会设置某种错误通知,但是当这些仍然发生时会提醒您。
rescue_from ActionView::MissingTemplate do |exception|
# render 404 and/or email yourself a notification
end
答案 1 :(得分:0)
最后,为我工作的是ApplicationController:
rescue_from ActionController::UnknownFormat do |exception|
redirect_to(controller: 'static_pages', action: 'not_found', original_url: request.original_url)
end
与相应的行动一起:
def not_found
@original_url = params[:original_url]
if @original_url.blank?
@original_url = request.original_url
end
respond_to do |format|
format.all { render :status => 404, :formats => 'html', content_type: "text/html" }
end
end