Ruby on rails 控制器未从ApplicationController继承方法
我有一个只有Rails6API的项目,它的行为很奇怪 “我的应用程序控制器”有一种拯救常见异常的方法: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
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类上,而没有在方法中定义它时,它工作得很好。但当我把它放在一个关注点上或放在一个方法中时,它就不再起作用了。