(我正在运行的rails的特定版本是2.3.8,但不管ruby / rails版本如何,都会感谢你的答案)
有一次,我在我的一个模型中使用了attr_accessor来控制状态 该模型还具有status属性和由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?
答案 0 :(得分:1)
rails dirty机制允许你告诉它会发生什么变化,例如你可以改变条形码作者
def bar= value
status_will_change!
@value = value
end
告诉我们需要保存状态列(状态列是否实际已经改变(或者确实会改变)并不重要。它只是确保rails认为有必要保存它记录栏。