Синхронизация двух записей моделей - бесконечный цикл обратных вызовов

У меня есть 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 при обновлении второй записи на основе обновлений первой и наоборот.

Другие вопросы по тегам