私は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を呼び出す必要はありません感じます。
定数をフリーズする必要はありません。一定である必要があります。 'Animals :: ANIMAL_TYPE_PARAMS'から' .freeze'を削除し、それを 'lib/animal.rb'の配列に残すと、うまくいくでしょう。 – binarymason
@binarymason謝罪します。私には巨大なタイプミスがありました!私は配列をスプラットしています。新しいパラメータリスト –
なぜあなたはANIMAL_TYPE_INPUT_PARAMS = Animals :: ANIMAL_TYPE_PARAMS – sonnyhe2002