在模块的类中传递后,params散列更改

时间:2012-08-29 06:14:49

标签: ruby-on-rails ruby ruby-on-rails-3

我的代码看起来像这样

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

我的问题是,“第二次检查”中的参数哈希与“第一次检查”中的参数不同。当在类的初始化程序中传递params散列时,会添加一些更多的键值对,当我在params上执行'second inspect'时,我也会在其中找到相同的键值对!这怎么可能?我甚至尝试传递一个包含action的params hash的单独变量,但是徒劳无功!

首先检查:{"action"=>"report", "controller"=>"member/monitoring", "offset"=>"0"}

第二次检查:{"new_key1"=>"new_val1", "action"=>"report", "controller"=>"member/monitoring","new_key2"=>"new_val2", "new_key3"=>"new_val3", "offset"=>"0"}

new_key *被添加到类中,但它们也会出现在action的params哈希中。

1 个答案:

答案 0 :(得分:1)

作为参数传递给方法的值是在Ruby中引用,而不是通过值引用。因此,它们可以是descructive,可以改变你的哈希值。您可以使用params.dup作为new方法的参数轻松解决此问题。

修改:正如mu指出的那样,实际让new方法本身执行dup更合适,而不是在传递params之前重复。