[英]Is it possible to create an object using Object.new(:attribute => “foobar”) with 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.