Rails action params[:user] 未提供如何 return 错误
Rails action params[:user] not provided how return error
我正在做一个项目,我想确保如果请求没有用户参数,它应该发送错误,所以我在控制器中使用了以下方法
class UsersController < ApplicationController
before_action :check_params
private
def user_params
params.require(:user).permit(:email, :password)
end
def check_params
render json: { error: 'No user params provided' }, status: 401 unless params[:user]
end
end
它工作正常,但我必须安装在每个单独的控制器上,有没有办法将它添加到所有控制器的应用程序中!因为只有 params[:user]
发生了变化,所以如果我有 params[:company]
,我必须在 CompaniesController 中添加另一个方法,其中包含 params[:company] 这并不是很枯燥。当我们使用 params.require(:user) 时,我很惊讶为什么它会给出错误而不是 return 验证错误。
好吧,与其创建整个方法,不如在您的操作检查 params[:user] 之前检查并在单行上拒绝,如下所示
@user = User.find_by_email(params[:user][:email]) if params[:user]
现在它不会搜索您的参数[:user]
您可以将通用逻辑移动到基 class 中的方法中,然后派生 classes 可以将自己的“可变”变量传递给它或忽略方法
class ApplicationController
def check_params(name, error_message)
render json: { error: error_message }, status: 400 if params[name].nil?
end
end
用法
class UsersController < ApplicationController
before_action -> { check_params(:user, "User is missing") }
end
我看起来像你想用自定义错误消息从 ActionController::ParameterMissing
中解救出来。 Rails 方法是 rescue_from
方法。
将以下内容添加到您的控制器:
rescue_from 'ActionController::ParameterMissing' do |exception|
render json: { error: 'No user params provided' }, status: 401
end
我正在做一个项目,我想确保如果请求没有用户参数,它应该发送错误,所以我在控制器中使用了以下方法
class UsersController < ApplicationController
before_action :check_params
private
def user_params
params.require(:user).permit(:email, :password)
end
def check_params
render json: { error: 'No user params provided' }, status: 401 unless params[:user]
end
end
它工作正常,但我必须安装在每个单独的控制器上,有没有办法将它添加到所有控制器的应用程序中!因为只有 params[:user]
发生了变化,所以如果我有 params[:company]
,我必须在 CompaniesController 中添加另一个方法,其中包含 params[:company] 这并不是很枯燥。当我们使用 params.require(:user) 时,我很惊讶为什么它会给出错误而不是 return 验证错误。
好吧,与其创建整个方法,不如在您的操作检查 params[:user] 之前检查并在单行上拒绝,如下所示
@user = User.find_by_email(params[:user][:email]) if params[:user]
现在它不会搜索您的参数[:user]
您可以将通用逻辑移动到基 class 中的方法中,然后派生 classes 可以将自己的“可变”变量传递给它或忽略方法
class ApplicationController
def check_params(name, error_message)
render json: { error: error_message }, status: 400 if params[name].nil?
end
end
用法
class UsersController < ApplicationController
before_action -> { check_params(:user, "User is missing") }
end
我看起来像你想用自定义错误消息从 ActionController::ParameterMissing
中解救出来。 Rails 方法是 rescue_from
方法。
将以下内容添加到您的控制器:
rescue_from 'ActionController::ParameterMissing' do |exception|
render json: { error: 'No user params provided' }, status: 401
end