2016-12-29 25 views
0

不幸的是,我在Rails 2.3.18上运行了一个应用程序,并且在控制器中看到了params变量的奇怪行为。有一些应用程序的区域(出于某种原因)将params分配给自己或默认情况下为空的散列。 params = (params || {}) 现在,params变量被初始化为请求参数,所以它应该在逻辑表达式中计算为true。但是,在这种情况下,params会被设置为{}。为什么会发生这种情况?Rails中的参数赋值2.3.18

回答

2

我没有一个Rails 2.3的应用程序玩弄但params在控制器实际上是方法,但是说params = ...创建阴影标准params方法的局部变量。例如,尝试这irb

def x 
    puts 'x is being called' 
    { :where_is => 'pancakes house?' } 
end 
x = x || { } 

,你会看到x{ }x方法甚至从来没有被调用。上面写着代码:

params = (params || {}) 

有效地这样做:

params = nil # Declare a local variable and initialize it to nil 
params = params || { } 
# -------^^^^^^ the local variable above, not the method 

但是,如果强制RHS params是一个方法调用:

params = params() || { } 
# -------------^^ 

那么它应该调用方法,但在作业的LHS中仍然会有本地params变量。

我想你需要弄清楚为什么代码在做params = params || { }并重构它,以便它不是必需的。当这些控制器方法实际上不在控制器中时,是否尝试工作?他们是否依赖于老版本的Ruby中边缘情况?那些代码是否通过某人抄袭了他们不明白的博客中的神秘代码而增加了货运风格?

+0

看起来这确实是发生了什么事情。我不知道这些方法需要明确调用方法。谢谢! – user2977636