ruby on rails添加了模型属性更改的功能

时间:2009-12-15 00:53:53

标签: ruby-on-rails ruby metaprogramming alias-method

在我的rails模型中,我有一个名为employer_wcb的小数属性。如果在更改employer_wcb时将脏位设置为true,我希望如此。我想覆盖employer_wcb setter方法。有没有办法(特别是使用元编程)?

2 个答案:

答案 0 :(得分:8)

实际上,从Rails v2.1开始,这已经融入了Rails。看看documentation for ActiveRecord::Dirty。总结:

# Create a new Thing model instance;
# Dirty bit should be unset...
t = Thing.new
t.changed?              # => false
t.employer_wcb_changed? # => false

# Now set the attribute and note the dirty bits.
t.employer_wcb = 0.525
t.changed?              # => true
t.employer_wcb_changed? # => true
t.id_changed?           # => false

# The dirty bit goes away when you save changes.
t.save
t.changed?              # => false
t.employer_wcb_changed? # => false

答案 1 :(得分:2)

如果你不想使用rails的内置脏位功能(比如你想因其他原因而覆盖),你就不能使用别名方法(参见我对Steve上面的条目的评论)。但是,你可以使用super来调用它。

  def employer_wcb=(val)
    # Set the dirty bit to true
    dirty = true
    super val
  end

这很好用。