1

我有一个模型层次结构,我正在尝试级联一个 :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中的错误吗?

4

2 回答 2

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
于 2013-08-05T14:39:26.177 回答
1

目前,这似乎是 Rails 中的“设计”。似乎也没有任何立即计划来改变这一点,所以目前如果你打算使用 :touch 并且只需要一个回调,你需要看看另一个选项。

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

于 2013-08-12T18:00:34.373 回答