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