2016-12-16 9 views
0

私はlib/animal.rbにいくつかのparamsのリストを書きました。コントローラのリストを参照して、それを私のparamsリストに追加したいと思います。私はいくつかの場所でこのリストを使用していて、ライブラリへの参照の束で自分のコードを捨てたくないので、これを行いました。Ruby Rubocop。 MutableConstant - 凍結を検出していません

コントローラ

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

定数をフリーズする必要はありません。一定である必要があります。 '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にアップグレードするとエラーはなくなりました。

関連する問題