ruby on rails добавляет функциональность к изменению свойств модели
-
19-09-2019 - |
Вопрос
В моей модели 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
Это работает просто отлично.