0

私のコードは次のようになります

class MyController

  def my_action
    #params hash gets passed here
      ...

    logger.debug "PARAMS >> #{params.inspect}" #first inspect

    @a = MyModule::MyClass.new(params).my_func #some operations done with the argument

    logger.debug "PARAMS >> #{params.inspect}" #second inspect

  end

end

私の問題は、「2番目の検査」のパラメータハッシュが「最初の検査」のパラメータハッシュと異なることです。paramsハッシュがクラスの初期化子に渡されると、さらにいくつかのキーと値のペアが追加され、paramsで「2回目の検査」を実行すると、同じキーと値のペアも見つかります。これはどのように可能ですか?アクションのparamsハッシュを含む別の変数を渡そうとしましたが、無駄でした!

最初の検査:{"action"=>"report", "controller"=>"member/monitoring", "offset"=>"0"}

2番目の検査:{"new_key1"=>"new_val1", "action"=>"report", "controller"=>"member/monitoring","new_key2"=>"new_val2", "new_key3"=>"new_val3", "offset"=>"0"}

new_key *はクラス内に追加されますが、アクションのparamsハッシュにも表示されます。

4

1 に答える 1

1

メソッドにパラメーターとして渡される値は、値ではなく、Rubyでの参照によるものです。そのため、それらは説明的であり、ハッシュを変更する可能性があります。params.dupメソッドの引数として使用することで、これを簡単に修正できますnew

編集:muが指摘したように、を渡す前に複製するnewのではなく、実際にメソッド自体にを実行させる方が適切です。dupparams

于 2012-08-29T06:19:31.127 に答える