after_touch回调被多次触发

时间:2013-08-05 14:29:35

标签: ruby-on-rails activerecord ruby-on-rails-4

我有一个模型层次结构,我正在尝试级联a:touch事件。

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

我有一个Post表单,它通过nesteed_attributes创建一个新的注释。当这个事件发生时,Category类上的after_touch方法会连续4次触发(相隔毫秒)并且我有点想知道原因。

在我看来,回调只应该针对交易被触发一次?我还注意到,在诸如销毁帖子之类的事件中,会对帖子触发回调,并且每个评论都会被销毁,导致多次调用。

这是正常行为吗?这是预期的吗?有没有解决的办法?这是Rails中的错误吗?

2 个答案:

答案 0 :(得分:2)

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
    has_many :comments, :dependent => :destroy
end

class Comment < ActiveRecord::Base
    belongs_to :post
end

posts_controller

def update
  ...
  if @post.update
     @post.category.touch
  else
     ...
  end

end

答案 1 :(得分:1)

目前看来这是Rails中的'设计'。似乎也没有立即改变这一点的计划,所以目前如果您计划使用:触摸并且只需要一次回调,您需要查看另一个选项。

https://github.com/rails/rails/issues/8759