Ruby on rails Rails 500显示PUT请求的空白页时出错

Ruby on rails Rails 500显示PUT请求的空白页时出错,ruby-on-rails,Ruby On Rails,我在rails应用程序中设置了自定义错误页面 应用程序.rb get '404', to: 'application#page_not_found' get '422', to: 'application#server_error' get '500', to: 'application#server_error' def page_not_found respond_to do |format| format.html { render template:

我在rails应用程序中设置了自定义错误页面

应用程序.rb

  get '404', to: 'application#page_not_found'
  get '422', to: 'application#server_error'
  get '500', to: 'application#server_error'
  def page_not_found
    respond_to do |format|
      format.html { render template: 'errors/not_found_error', layout: 'layouts/application', status: 404 }
      format.all  { render nothing: true, status: 404 }
    end
  end

  def server_error
    respond_to do |format|
      format.html { render template: 'errors/internal_server_error', layout: 'layouts/error', status: 500 }
      format.all  { render nothing: true, status: 500}
    end
  end 
config.exceptions\u app=self.routes

routes.rb

  get '404', to: 'application#page_not_found'
  get '422', to: 'application#server_error'
  get '500', to: 'application#server_error'
  def page_not_found
    respond_to do |format|
      format.html { render template: 'errors/not_found_error', layout: 'layouts/application', status: 404 }
      format.all  { render nothing: true, status: 404 }
    end
  end

  def server_error
    respond_to do |format|
      format.html { render template: 'errors/internal_server_error', layout: 'layouts/error', status: 500 }
      format.all  { render nothing: true, status: 500}
    end
  end 
应用程序\u控制器.rb

  get '404', to: 'application#page_not_found'
  get '422', to: 'application#server_error'
  get '500', to: 'application#server_error'
  def page_not_found
    respond_to do |format|
      format.html { render template: 'errors/not_found_error', layout: 'layouts/application', status: 404 }
      format.all  { render nothing: true, status: 404 }
    end
  end

  def server_error
    respond_to do |format|
      format.html { render template: 'errors/internal_server_error', layout: 'layouts/error', status: 500 }
      format.all  { render nothing: true, status: 500}
    end
  end 
当我执行抛出错误的GET请求时,我的自定义500错误页面显示得很好,但当我提交触发NoMethodError的表单时,如果是PUT请求,我只会得到一个空白页面

您知道为什么GET请求的500错误页面显示正确,而PUT请求的500错误页面显示不正确吗

我尝试将
server\u错误
方法更改为

  def server_error
    render template: 'errors/internal_server_error', layout: 'layouts/error', status: 500 
  end 
但这似乎没有帮助


如果我能提供更多的代码,请告诉我,我不确定如何对此进行故障排除。

在您的routes.rb上使用
match
via
,将所有类型的HTTP请求路由到自定义错误操作

  # error routes
  match '/404' => 'application#page_not_found', :via => :all
  match '/422' => 'application#unprocessable_entity', :via => :all
  match '/500' => 'application#server_error', :via => :all

在routes.rb上使用
match
via
,将所有类型的HTTP请求路由到自定义错误操作

  # error routes
  match '/404' => 'application#page_not_found', :via => :all
  match '/422' => 'application#unprocessable_entity', :via => :all
  match '/500' => 'application#server_error', :via => :all

尝试将
get
更改为
match
。在路由中
get
意味着获取请求,因为
put
post
patch
delete
都会这样做。正如@sa77所回答的,请尝试使用match with
via::all
。如果答案有帮助,请接受并关闭问题,以便有类似问题的人可以找到它easily@sa77我很乐意接受。你想对我提出的关于
match
被弃用的问题发表意见吗?尝试将
get
更改为
match
。在路由中
get
意味着get请求,就像
put
post
patch
delete
一样。正如@sa77所回答的,请尝试使用match with
via::all
。如果答案有帮助,请接受并关闭问题,以便有类似问题的人可以找到它easily@sa77我很乐意接受。你愿意对我提出的关于
match
被弃用的问题发表评论吗?谢谢,这很有效。不过我认为
match
不受欢迎。match的一些用例被贬低,比如使用特定的http动词,如
match:via=>:get
,使用通用路由
match'/:controller/:action'
,等等。您需要浏览rails gem的代码库来进一步研究
捆绑开放rails
。但是,如果您使用
match:via=>:all
,则不会收到折旧警告。谢谢您的帮助。不过我认为
match
不受欢迎。match的一些用例被贬低,比如使用特定的http动词,如
match:via=>:get
,使用通用路由
match'/:controller/:action'
,等等。您需要浏览rails gem的代码库来进一步研究
捆绑开放rails
。但是,如果使用
match:via=>:all
,您将不会收到折旧警告。