加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 更改before_save挂钩中的ActiveRecord属性值

发布时间:2020-12-17 02:50:50 所属栏目:百科 来源:网络整理
导读:我需要修复ActiveRecord属性的编码,并决定在before_save挂钩中执行此操作.此时我发现了一个意想不到的功能.当我想更改属性的值时,使用attribute_name = XY的简单操作并不像我预期的那样工作.而不是我需要使用self [:attribute_name] = XY.到目前为止还没有
我需要修复ActiveRecord属性的编码,并决定在before_save挂钩中执行此操作.此时我发现了一个意想不到的功能.当我想更改属性的值时,使用attribute_name = XY的简单操作并不像我预期的那样工作.而不是我需要使用self [:attribute_name] = XY.到目前为止还没有认识到这种行为,我使用了AR.attribute_name = XY.这是什么原因?这种行为是否与钩子或其他东西有关?谢谢你的解释.

解决方法

这实际上是一个 Ruby“功能”:

def value=(x)
  p x
end

def run
  value = 123
end

run
# => 123

在上面的#run中,执行值会分配一个局部变量,而不是其他任何东西.如果你想调用#value =,你必须指定接收者:

def run
  self.value = 123
end

run
123
# => nil

希望这可以帮助!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读