2016-12-16 22 views
0

我写了一个带有几个参数列表的lib/animal.rb,我想在控制器中引用该列表并将其添加到我的参数列表中。我这样做是因为我在多个位置使用了这个列表,并且不想用一堆对库引用来抛弃我的代码。红宝石Rubocop。 MutableConstant - 未检测到冻结

控制器

ANIMAL_TYPE_INPUT_PARAMS = *Animals::ANIMAL_TYPE_PARAMS.freeze 

.... 

def familar_params 
    params.permit(ANIMAL_TYPE_INPUT_PARAMS, OTHER_PARAM_LIST....) 
end 

库/ animal.rb

module Animal 

    # param lists 
    ANIMAL_TYPE_PARAMS = [ 
    :animal_has_fur, :animal_id, :animal_weight 
    ].freeze 
end 

功能,它工作得很好,但我看到一个奇怪的rubocop错误。我宁愿不为本节禁用MutableConstant(禁用rubocop通常是您在某些时候支付的乐队帮助)。

Rubocop错误

app/controllers/api/v1/example_controller.rb:55:24: C: Freeze mutable objects assigned to constants. 
    ANIMAL_TYPE_INPUT_PARAMS = *Animals::ANIMAL_TYPE_PARAMS.freeze 
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

我看着这样一个问题:Ruby rubocop: how to freeze an array constant generated with splat但是我的是已经数组,所以我觉得它并不适用于我的/不应该叫to_a。

+0

你不需要冻结一个常量,因为它应该......好吧,保持不变。从'Animals :: ANIMAL_TYPE_PARAMS'中移除'.freeze',并将其保存在'lib/animal.rb'中的数组上,这样你就没事了。 – binarymason

+0

@binarymason我的歉意。我有一个巨大的错字!我正在溅出阵列。到新的参数列表 –

+0

为什么你不能ANIMAL_TYPE_INPUT_PARAMS = Animals :: ANIMAL_TYPE_PARAMS – sonnyhe2002

回答

0

正如@drenmi所说,它是一个老版本的rubocop,它给了我这个错误。一旦我升级到0.46.0,错误不再存在。