我写了一个带有几个参数列表的lib / animal.rb,我想在我的控制器中引用该列表并将其添加到我的参数列表中。我之所以这样做,是因为我在几个地方使用这个列表,并且不希望通过一堆对库的引用来丢弃我的代码。
控制器
ANIMAL_TYPE_INPUT_PARAMS = *Animals::ANIMAL_TYPE_PARAMS.freeze
....
def familar_params
params.permit(ANIMAL_TYPE_INPUT_PARAMS, OTHER_PARAM_LIST....)
end
LIB / 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 :(得分:0)
正如@drenmi所说,这是一个旧版本的rubocop给我这个错误。一旦我升级到0.46.0,错误就不再存在。