开发者

Rails after_save callback being called multiple times

开发者 https://www.devze.com 2023-04-09 04:44 出处:网络
I\'m trying to inject an after_save callback via a mixin, but my rspec tests are telling me that the callback is being called twice when the create method is called.Why is the method 开发者_如何学编程

I'm trying to inject an after_save callback via a mixin, but my rspec tests are telling me that the callback is being called twice when the create method is called. Why is the method 开发者_如何学编程being called twice?

The following rspec test fails

it 'should call callback' do
  Product.any_instance.should_receive(:update_linkable_attachments).once
  Product.create(:name=>'abc')
end

The failure message is:

Failure/Error: Unable to find matching line from backtrace
   (#<Product:0xb7db738>).update_linkable_attachments(any args)
       expected: 1 time
       received: 2 times

Here's the code

module MainModuleSupport
  def self.included(base)
    base.instance_eval("after_save :update_linkable_attachments")
  end 

  def update_linkable_attachments
    LinkedAttachment.delay.create_from_attachment self
  end
end

class Product < ActiveRecord::Base
  include MainModuleSupport
  ...

end

The Product class has other code, but does not have any other callbacks.


after_save is part of the transaction and therefore may be called more than once provided that you have other associated objects that need to be saved as well. In cases like this I typically move from the after_save callback to the after_commit callback which runs only after the transaction has completed.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号