Jon*_*ger 5 ruby ruby-on-rails
我们今天遇到了一个有趣的问题.似乎如果使用铲运算符在ActiveRecord模型上连接字符串属性,它不会使模型变脏.例如:
e = Employee.first
e.name << "asdf"
e.name_changed? # returns false
e.changed? # returns false
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为铲子操作员更新一个字符串而不复制它,其中+ =运算符将复制该字符串.我不知道如果你使用铲子操作员,ActiveRecord怎么可能知道有什么改变.
有没有人见过这个?解决方案只是使用+=
而不是<<
连接字符串时?
解决方法是你写的.
或者你可以在之前标记你的属性会改变
e = Employee.first
e.name_will_change!
e.name << "asdf"
e.name_changed? # => true
Run Code Online (Sandbox Code Playgroud)
它是API文档中的标记.::加载ActiveModel脏
归档时间: |
|
查看次数: |
1078 次 |
最近记录: |