Обратный вызов модели Rails не всегда запускается из другой модели - PullRequest
1 голос
/ 23 июля 2011

У меня странная проблема.Например, у меня есть только две модели:

class Book < ActiveRecord::Base  
    belongs_to :shelf  
    after_update :specific_callback  
    private  
    def specific_callback  
        # some actions here  
    end  
end  

class Shelf < ActiveRecord::Base
    has_many :books
end

Так что проблема в том, что если я изменю точное отношение книжная полка через книгу - например:

book.shelf = shelf  
# or  
book.shelf_id = shelf.id  

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

shelf.book_ids = [1,2,3]  

здесь обратные вызовы для книг запускаются только для новых добавленных книг, другими словами, если book.shelf_id изменяется с nil на некоторый shelf.id - все нормально, и обратный вызов срабатывает нормально, но если book.shelf_id изменится на nil из-за отсутствия обратного вызова.
Я вижу все запросы в консоли, когда Shel_id изменяется для всех книг, но обратные вызовы не запускаются для тех, кто получает nil для shelf_id.
Ive ужепытался использовать after_update, after_save.Я даже пытался использовать наблюдателей, но проблема все еще появляется.

...