首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在保存时执行覆盖的模型getter?

在保存时执行覆盖的模型getter?
EN

Stack Overflow用户
提问于 2014-01-24 17:04:12
回答 1查看 114关注 0票数 0

我目前正在修复Rails插件中的一个bug,我刚刚找到了导致这个问题的方法。我的猜测是,它与它的ActiveRecord类Sprint中覆盖的getter方法之一有某种联系。方法名为burndown,还有一个名为burndown的属性,它存储序列化哈希。

代码语言:javascript
复制
class Sprint < ActiveRecord::Base

  serialize :burndown, Hash
  ...

  def touch!
    ... do stuff ...
    self.burndown = nil
    self.save!
  end

  def burndown
    ... some crazy-ass method ...
  end
end

因此,在保存时会以某种方式执行燃尽方法,但我不太确定为什么,因为没有为Sprint类定义回调。是否有可能是覆盖getter方法导致了这种情况?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-24 18:54:48

即使您没有任何验证或回调,Getter方法在保存时也会被调用。

代码语言:javascript
复制
"/home/user/.rvm/gems/ruby-1.9.3-p194/gems/activemodel-3.2.13/lib/active_model/dirty.rb:143:in `attribute_change'"
"/home/user/.rvm/gems/ruby-1.9.3-p194/gems/activemodel-3.2.13/lib/active_model/dirty.rb:117:in `block in changes'"
"/home/user/.rvm/gems/ruby-1.9.3-p194/gems/activemodel-3.2.13/lib/active_model/dirty.rb:117:in `map'"
"/home/user/.rvm/gems/ruby-1.9.3-p194/gems/activemodel-3.2.13/lib/active_model/dirty.rb:117:in `changes'"
"/home/user/.rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.13/lib/active_record/attribute_methods/dirty.rb:23:in `save'"
"/home/user/.rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.13/lib/active_record/transactions.rb:259:in `block (2 levels) in save'"
"/home/user/.rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.13/lib/active_record/transactions.rb:313:in `block in with_transaction_returning_status'"
"/home/user/.rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/database_statements.rb:192:in `transaction'"
"/home/user/.rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.13/lib/active_record/transactions.rb:208:in `transaction'"
"/home/user/.rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.13/lib/active_record/transactions.rb:311:in `with_transaction_returning_status'"
"/home/user/.rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.13/lib/active_record/transactions.rb:259:in `block in save'"
"/home/user/.rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.13/lib/active_record/transactions.rb:270:in `rollback_active_record_state!'"
"/home/usha/.rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.13/lib/active_record/transactions.rb:258:in `save'"

因此,如果为属性重写getter,请确保它仍然执行其原始功能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21338301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档