Ruby on rails Rails模型的回调并非总是从另一个模型触发

Ruby on rails Rails模型的回调并非总是从另一个模型触发,ruby-on-rails,collections,callback,has-many,belongs-to,Ruby On Rails,Collections,Callback,Has Many,Belongs To,我有一个奇怪的问题。例如,我只有两种型号: class Book < ActiveRecord::Base belongs_to :shelf after_update :specific_callback private def specific_callback # some actions here end end class Shelf < ActiveRecord::Base

我有一个奇怪的问题。例如,我只有两种型号:

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—没关系,所以回调会正常启动,但如果我使用book through shelf及其方法book_ID,就会出现问题,例如:

book.shelf = shelf  
# or  
book.shelf_id = shelf.id  
shelf.book_ids = [1,2,3]  
在这里,书籍的回调仅在新添加的书籍上触发,换句话说,如果book.shelf\u id从nil更改为某个shelf.id-这没关系,并且回调正常触发,但是如果book.shelf\u id从某个内容更改为nil-则不会触发回调。 当所有书籍的shelf_id发生变化时,我在控制台中看到所有查询,但对于shelf_id为零的书籍,回调不会触发。
我已经试过在更新后、保存后使用。我甚至尝试使用观察者,但问题仍然存在。

在Base.save之后调用,在已有记录的对象上进行保存。也许这意味着,如果book.shelf_id更改为nil,那么它现在不知道某个记录,并且不会触发回调?如果是,这意味着我不太理解rails activerecord,因为我在控制台中看到sql查询,其中book.shelf_id更新为nil,我认为该事件应该100%触发所有book回调。如果这不是真的,我最好找到另一种方法来解决我的问题。