Rails 检查控制器中是否存在参数
Rails check if params exist in the controller
我有一个 factor
控制器,它为两种不同类型的因子取因子值
- 主要因素
- 次要因素
然后我将它们作为参数传递如下:
class FactorController < AdminController
def create
if primary_factor_params ## LINE 5
do something
elsif secondary_factor_params
do something else
end
end
def primary_factor_params
params.require(:primary).permit(:user_id, ## LINE 70
:primary_factors)
end
def secondary_factor_params
params.require(:secondary).permit(:user_id,
:secondary_factors)
end
end
但是在上面,每当我尝试传递 secondary_factor
时,我都会收到以下错误:
ActionController::ParameterMissing (param is missing or the value is empty: primary):
app/controllers/factors_controller.rb:70:in `primary_factor_params' app/controllers/api/v1/admin/factors_controller.rb:5:in `create'
所以对我来说,似乎出现此错误是因为在这种情况下我没有 primary_factor_params
的任何值,这就是第一个 if 条件引发错误的方式。
我试过:
primary_factor_params.exists?
primary_factor_params.has_key?(:primary_factors)
....
但是由于 primary_factor_params
不存在,所以它们都抛出相同的错误。有没有一种方法可以在不因缺少参数而引发错误的情况下进行测试?
问题是这一行 params.require(:primary)
说参数是必需的,所以如果你根本没有 :primary
参数,那么尝试像 params.require(:primary).exists?
那样做对你没有帮助,因为require
已经失败了。
您需要检查它在 params
上是否存在。例如 params.has_key?(:primary)
.
根据您的用例,您也可以直接在 params
上使用 params.permit(:primary)
。有关如何使用 ActionController::Parameters
(params
的 class)的详细信息,请参阅 API 文档。
http://api.rubyonrails.org/classes/ActionController/Parameters.html#method-i-permit
您可以通过 params[:primary].present?
检查您的情况下是否存在参数
我认为这是最简单的方法
我有一个 factor
控制器,它为两种不同类型的因子取因子值
- 主要因素
- 次要因素
然后我将它们作为参数传递如下:
class FactorController < AdminController
def create
if primary_factor_params ## LINE 5
do something
elsif secondary_factor_params
do something else
end
end
def primary_factor_params
params.require(:primary).permit(:user_id, ## LINE 70
:primary_factors)
end
def secondary_factor_params
params.require(:secondary).permit(:user_id,
:secondary_factors)
end
end
但是在上面,每当我尝试传递 secondary_factor
时,我都会收到以下错误:
ActionController::ParameterMissing (param is missing or the value is empty: primary):
app/controllers/factors_controller.rb:70:in `primary_factor_params' app/controllers/api/v1/admin/factors_controller.rb:5:in `create'
所以对我来说,似乎出现此错误是因为在这种情况下我没有 primary_factor_params
的任何值,这就是第一个 if 条件引发错误的方式。
我试过:
primary_factor_params.exists?
primary_factor_params.has_key?(:primary_factors)
....
但是由于 primary_factor_params
不存在,所以它们都抛出相同的错误。有没有一种方法可以在不因缺少参数而引发错误的情况下进行测试?
问题是这一行 params.require(:primary)
说参数是必需的,所以如果你根本没有 :primary
参数,那么尝试像 params.require(:primary).exists?
那样做对你没有帮助,因为require
已经失败了。
您需要检查它在 params
上是否存在。例如 params.has_key?(:primary)
.
根据您的用例,您也可以直接在 params
上使用 params.permit(:primary)
。有关如何使用 ActionController::Parameters
(params
的 class)的详细信息,请参阅 API 文档。
http://api.rubyonrails.org/classes/ActionController/Parameters.html#method-i-permit
您可以通过 params[:primary].present?
检查您的情况下是否存在参数
我认为这是最简单的方法