Ruby on rails 参数散列在传递到模块';s级
我的代码看起来像这样Ruby on rails 参数散列在传递到模块';s级,ruby-on-rails,ruby,ruby-on-rails-3,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
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执行“第二次检查”时,我也会在其中找到相同的键值对!这怎么可能?我甚至尝试传递一个单独的变量,其中包含操作的params散列,但没有成功
首先检查:{“操作”=>“报告”、“控制器”=>“成员/监控”、“偏移量”=>“0”}
第二次检查:{“new\u key1”=>“new\u val1”,“action”=>“report”,“controller”=>“member/monitoring”,“new\u key2”=>“new\u val2”,“new\u key3”=>“new\u val3”,“offset”=>“0”}
新的_键*被添加到类中,但它们也出现在操作的params散列中。作为参数传递给方法的值在Ruby中是通过引用传递的,而不是通过值传递的。因此,它们可以是描述性的,并且可以更改您的散列。通过使用
params.dup
作为new
方法的参数,可以很容易地解决这个问题
编辑:正如mu所指出的,实际上让
new
方法本身执行dup
,而不是在通过params
之前进行复制更为合适,可以添加第一次检查
和第二次检查
的输出。这将有助于理解。或者至少是区别。另外,如果某些内容确实发生了更改,那么应该在MyModule::MyClass
行中。。。那么,也谈谈这方面的情况。它实际上在做什么?如果由MyModule::MyClass执行复制,效果会更好。