2010-06-10 5 views
0
class Account < ActiveRecord::Base 
    after_update :give_user_credit, :on => :update 

    def give_user_credit 
    credit = User.current_user.credit + 3.8 
    User.current_user.update_attribute(:credit, credit) 
    end 
end 

Когда я использую это, сервер зависает, и когда я возвращаюсь к приложению после полной перезагрузки, мой кредит составляет 1000 фунтов стерлингов.Почему это бесконечный цикл? ActiveRecord

Что здесь происходит ..

спасибо: D

ответ

6

кажется мне, как вы устанавливаете :give_user_credit callback запускать каждый раз, когда запись обновляется.

Но поскольку обратный вызов обновляет запись, она затем запускает обратный вызов снова, который будет продолжаться и дальше ...

+0

Спасибо за то, Айвы переместил логику в контроллер, и теперь его рабочий штраф, позор £ 3112.20 является подделкой: P –

+0

@Karl Как насчет before_save: on =>: обновление, а затем просто не вызывать update_attribute ...? – hurikhan77

1

Вы также можете использовать этот частный метод:

model.credit = 10 
model.send(:update_without_callbacks) 
Смежные вопросы