2017-08-25 75 views
1

我有一个factor控制器,其采用因子值对于两种不同类型的因素滑轨检查是否在控制器

  1. 主要因素
  2. 次要因素

存在PARAMS和我将它们作为params如下:

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,这就是方式,它抛出,因为第一次的错误如果条件。

我已经试过:

primary_factor_params.exists? 
primary_factor_params.has_key?(:primary_factors) 
.... 

但他们都抛出了同样的错误,因为primary_factor_params不存在。有没有一种方法来测试这个没有丢失的参数错误?

回答

3

问题是此行params.require(:primary)说,参数是必需的,因此试图做这样params.require(:primary).exists?不会帮助你,如果你没有一个:primary PARAM,因为在所有的require已经失败。

你需要检查它的存在params本身。例如params.has_key?(:primary)

对您的使用案例有依赖性,您也可以直接在params上使用params.permit(:primary)。有关如何使用ActionController::Parametersparams的类)的详细信息,请参阅API文档。

http://api.rubyonrails.org/classes/ActionController/Parameters.html#method-i-permit

+0

是的,这非常有意义,我削除的事实,我需要测试'params'因为'primary_factor_params'不会在这种情况下,存在于所有 – anonn023432