Синхронизация двух записей моделей - бесконечный цикл обратных вызовов
У меня есть 2 записи одной модели, и я хочу синхронизировать некоторые данные из этих записей.
Я собирался сделать обратный вызов after_save (или, возможно, наблюдателя), чтобы инициировать обновление другой записи, но я боюсь, что это вызовет бесконечный цикл сохранений, потому что другая запись вызовет обратный вызов.
Я читал здесь, что вы можете обойти обратные вызовы при сохранении, но эти подходы кажутся хакерскими и несовместимыми между рельсами 2 и 3 (мы переходим к рельсам 3 через пару месяцев).
Есть ли лучший вариант?
2 ответа
Решение
Вы можете создать attr_accessor:
attr_accessor :dont_run_callback
after_save :my_callback
def my_callback
MyModel.find(1).update_attributes(..., :dont_run_callback => true) unless dont_run_callback
end
что-то вроде того
Вы можете использовать
update_columns
при обновлении второй записи на основе обновлений первой и наоборот.