Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 控制器未从ApplicationController继承方法_Ruby On Rails_Ruby_Oop_Inheritance - Fatal编程技术网

Ruby on rails 控制器未从ApplicationController继承方法

Ruby on rails 控制器未从ApplicationController继承方法,ruby-on-rails,ruby,oop,inheritance,Ruby On Rails,Ruby,Oop,Inheritance,我有一个只有Rails6API的项目,它的行为很奇怪 “我的应用程序控制器”有一种拯救常见异常的方法: class ApplicationController < ActionController::API before_action :rescue_errors private def rescue_errors rescue_from ActiveRecord::RecordNotFound do render json: { error: { me

我有一个只有Rails6API的项目,它的行为很奇怪

“我的应用程序控制器”有一种拯救常见异常的方法:

class ApplicationController < ActionController::API
  before_action :rescue_errors

  private

  def rescue_errors
    rescue_from ActiveRecord::RecordNotFound do
      render json: { error: { message: ['Record not found'] } }, status: :not_found
    end
  end
end
class ApplicationController
这是我的用户控制器:

class Api::V1::User::UsersController < ApplicationController
  def show
    user = User.find(params[:id])
    render json: { user_id: user.id }, status: :ok
  end
end
class Api::V1::User::UsersController
然后,我尝试访问一个不存在的用户id,以获取从ApplicationController继承的已获救RecordNotFound exception,并得到以下错误:

<NoMethodError: undefined method `rescue_errors' for #<Api::V1::User::UsersController:0x00007f71484b3be0>\nDid you mean?  rescue_handlers>

看起来这不起作用,因为Rails中的
如何从
中拯救您。它应该在类定义中使用,而不是包装在私有方法中

所以你应该做:

class ApplicationController < ActionController::API
  before_action :rescue_errors

  rescue_from ActiveRecord::RecordNotFound do
    render json: { error: { message: ['Record not found'] } }, status: :not_found
  end    
end
class ApplicationController
看起来这是行不通的,因为Rails中的
是如何从
中解救出来的。它应该在类定义中使用,而不是包装在私有方法中

所以你应该做:

class ApplicationController < ActionController::API
  before_action :rescue_errors

  rescue_from ActiveRecord::RecordNotFound do
    render json: { error: { message: ['Record not found'] } }, status: :not_found
  end    
end
class ApplicationController
您可以执行以下操作:


类ApplicationController

您可以为每个可能的错误创建不同的答案。

您可以执行以下操作:


类ApplicationController

您可以为每个可能的错误创建不同的答案。

您的Rails应用程序API是仅API还是API和标准MVC都有?@LacostnyCoder API only请您说明如何定义
rescue_from
?您的Rails应用程序API是仅API还是API和标准MVC都有?@LacostnyCoder API only请说明
rescue_from
的定义方式定义?我以前尝试过,但错误根本不会被拯救,而是作为异常被抛出:当我将“rescue_from…”直接放在ApplicationController类上,而不在方法中定义它时,它可以完美地工作。但当我把它放在一个关注点上或放在一个方法中时,它就不再起作用了。我以前尝试过这个方法,但错误根本没有被挽救,而是作为异常抛出:当我把“rescue_from…”直接放在ApplicationController类上,而没有在方法中定义它时,它工作得很好。但当我把它放在一个关注点上或放在一个方法中时,它就不再起作用了。