【问题标题】:Param assignment in Rails 2.3.18Rails 2.3.18 中的参数分配
【发布时间】:2016-12-29 18:39:53
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails parameters parameter-passing


    【解决方案1】:

    我没有可玩的 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 中的边缘情况?这段代码是不是有人从他们不理解的博客上复制神秘代码而添加了货物崇拜风格?

    【讨论】:

    • 看起来确实是这样。我不知道在这些类型的场景中需要显式调用方法。谢谢!
    猜你喜欢
    • 2013-07-23
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多