Rails — Как запустить метод при каждом обновлении записи

#ruby-on-rails #ruby-on-rails-3

#ruby-on-rails #ruby-on-rails-3

Вопрос:

в моем приложении моя пользовательская модель имеет instance_id, который связан с моделью экземпляра.

 User:
id, email, instance_id

Instance:
id, domain
  

итак, если электронное письмо является bob@yahoo.com , его instance_id равен 5, поскольку (5, yahoo.com ) находится в таблице экземпляров.

Что я хочу сделать, так это каждый раз, когда обновляется запись пользователя, проверять, соответствует ли адрес электронной почты правильному домену. Итак, у меня есть следующее:

 after_save :assign_user_to_instance

def assign_user_to_instance
    domain = email.split("@").last
    user_instance = Instance.find_or_create_by_domain domain
    update_attribute(:instance_id, user_instance.id)
end
  

Проблема в том, что когда это выполняется, это переходит в сумасшедший цикл обновлений базы данных и никогда не заканчивается. Каков правильный способ достичь этого?

Спасибо

Ответ №1:

Попробуйте использовать ‘before_save’ вместо ‘after_save’.