繁体   English   中英

attr_accessors只是属性更改的触发器回调吗?

[英]attr_accessors are only attribute changed trigger callbacks?

(我正在运行的Rails的特定版本是2.3.8,但无论使用ruby / rails版本如何,都希望能得到一个有效的答案)

有一次,我在一个模型中使用attr_accessor来控制状态。
该模型还具有状态属性和由before_update回调触发的函数。

看起来像这样

class Foo < ActiveRecord::Base
  attr_accessor :bar
  before_update :revise_status


  def revise_status
    if status == "start_state"
      if bar
        self.status = "end_state"
      end
    elsif status == "end_state"
      #this was the end_state and was not supposed to be left
    end
  end

end

如您所见,我使用attr_accessor作为信号表示应该从一种状态过渡到另一种状态。 这样,我有效地制作了一个简单的状态机。 转换完成后,我认为没有理由保存转换,因此没有attr_accessor。

这工作得很好,除了当没有属性更改时,除了attr_accessor之外,没有调用我的函数。

有没有一种方法可以使attr_accessor的行为像nil以外的其他东西一样脏?

rails脏机制使您可以告诉它某些事情会发生变化,例如,您可以更改bar writer

def bar= value
  status_will_change!
  @value = value
end

它告诉Rail需要保存状态列(状态列是否已实际更改(或确实会更改)都没有关系。它只是确保Rails认为有必要从记录中保存该列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM