ruby on rails добавляет функциональность к изменению свойств модели

StackOverflow https://stackoverflow.com/questions/1904595

Вопрос

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

Это было полезно?

Решение

Так что на самом деле, начиная с 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

Другие советы

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

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

Это работает просто отлично.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top