У меня есть иерархия моделей, для которых я пытаюсь каскадировать событие touch.after_touch callback запускается несколько раз
class Category < ActiveRecord::Base
has_many :posts
after_touch :do_stuff
def do_stuff
# do stuff...
end
end
class Post < ActiveRecord::Base
belongs_to :category, :touch => true
has_many :comments, :dependent => :destroy
end
class Comment < ActiveRecord::Base
belongs_to :post, :touch => true
end
У меня есть форму для публикации, которая создает новый комментарий через nesteed_attributes. Когда это событие происходит, метод after_touch класса Category запускается 4 раза подряд подряд (в миллисекундах), и я немного теряю, чтобы понять, почему.
На мой взгляд, обратный вызов должен быть уволен только один раз для транзакции? Я также замечаю, что в таких случаях, как уничтожение сообщения, обратный вызов запускается для сообщения, а каждый из комментариев, который уничтожается, приводит к множеству звонков.
Это нормальное поведение? Ожидается? Есть ли способ обойти это? Это ошибка в Rails?
может быть, вы хотите использовать 'after_initialize'? – MrYoshiji
Извините бутон - это Rails 4.0.0, я обновляю теги за мгновение. – SirRawlins
after_touch - это обратный вызов, который вы хотите использовать? или это метод, который вам нужно применить к объекту? – rmagnum2002