Конфликт обратного вызова - PullRequest
       0

Конфликт обратного вызова

0 голосов
/ 25 сентября 2011

Оба моих метода обратного вызова содержат update_attributes. Таким образом, похоже, что при запуске calc_rating также вызывается метод modify_rating. Я хочу, чтобы при расчете новой записи запускался Calculate_rating, а при редактировании и обновлении записи через форму запускались только команды modify_rating.

     after_create :calculate_rating
     before_update :modify_rating


      def calculate_rating
      end

      def modify_rating
      end

1 Ответ

0 голосов
/ 25 сентября 2011

Из тонкой инструкции для update_attributes:

Обновляет атрибуты модели из переданного хэша и сохраняет запись [...]

Поэтому, когда вы вызываете update_attributes, он попытается сохранить объект, а это означает, что update_attributes не подходит ни для одного из используемых вами обратных вызовов; update_attributes предназначен для использования контроллерами для массового назначения и т. П.

Вы можете заменить вызов update_attributes простыми назначениями:

def calculate_rating
    self.attr1 = 11
    self.attr2 = 23
    #...
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...