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。
你不需要冻结一个常量,因为它应该......好吧,保持不变。从'Animals :: ANIMAL_TYPE_PARAMS'中移除'.freeze',并将其保存在'lib/animal.rb'中的数组上,这样你就没事了。 – binarymason
@binarymason我的歉意。我有一个巨大的错字!我正在溅出阵列。到新的参数列表 –
为什么你不能ANIMAL_TYPE_INPUT_PARAMS = Animals :: ANIMAL_TYPE_PARAMS – sonnyhe2002