Rails模型回调并不总是从另一个模型触发

时间:2011-07-23 06:51:29

标签: 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
    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 从某事变为零 - 没有回调的发射 当shelf_id为所有书籍更改时,我在控制台中看到所有查询,但是对于那些为shelf_id获取nil的人,不会触发回调。
我已经尝试过after_update,after_save。我甚至试图使用观察者,但问题仍然存在。

0 个答案:

没有答案