代码之家  ›  专栏  ›  技术社区  ›  fifigyuri

在保存挂钩之前更改activerecord属性值

  •  4
  • fifigyuri  · 技术社区  · 15 年前

    我需要修复activerecord属性的编码,并决定在before_save钩子中执行此操作。在这一点上,我注意到了一个意想不到的特点。当我想更改属性的值时,只需使用 attribute_name=XY 没有像我预期的那样工作。而不是我需要用的 self[:attribute_name]=XY . 到目前为止我还没有意识到这种行为 AR.attribute_name=XY . 这是什么原因?这种行为与钩子或其他东西有关吗?谢谢你的解释。

    1 回复  |  直到 15 年前
        1
  •  8
  •   François Beausoleil    15 年前

    这实际上是一个ruby“特性”:

    def value=(x)
      p x
    end
    
    def run
      value = 123
    end
    
    run
    # => 123
    

    在上面的run中,doing value指定 地方的 变量,不是别的。如果要调用value=,则必须指定接收方:

    def run
      self.value = 123
    end
    
    run
    123
    # => nil
    

    希望这有帮助!

    推荐文章