ruby on rails добавляет функциональность к изменению свойств модели - PullRequest
2 голосов
/ 15 декабря 2009

В моей модели rails у меня есть десятичное свойство с именем Employer_wcb. Я бы хотел, чтобы при изменении Employer_wcb для грязного бита было установлено значение true. Я хотел бы переопределить метод сеттера Employer_wcb. Любой способ сделать это (в частности, с помощью метапрограммирования)?

Ответы [ 2 ]

8 голосов
/ 15 декабря 2009

Так что на самом деле, с Rails v2.1, это было включено в Rails. Посмотрите документацию для 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
2 голосов
/ 15 декабря 2009

Если вы не хотите использовать встроенную в Rail функциональность «грязных битов» (например, вы хотите переопределить по другим причинам), вы не можете использовать метод псевдонима (см. Мои комментарии к записи Стива выше). Однако вы можете использовать вызовы super, чтобы заставить его работать.

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

Это прекрасно работает.

...