After_save -- stack level too deep


#1

Hi all,

I’m running into a brick wall trying to figure out my problem here. I
have a model that has a boolean property called “paid”. I’d like to
add the following to my model:

def after_save
self.amount == self.splits.sum(:amount) ? self.update_attribute
(:paid, true) : self.update_attribute(:paid, false)
end

The problem is, when I do this I get an error that my stack level is
too deep. If I throw this in with one of the model’s validators it
works just fine, but that’s not the right way to do this…

I don’t see how I’m recursing here, so any help would be appreciated!

Thanks!


#2

update_attribute saves the updated record, so after_save will be called
again, hence the recursion.
Colin


#3

You should update by sql in after_save.

On Sun, Jan 18, 2009 at 12:34 PM, Neal L removed_email_address@domain.invalid wrote:

end


TWRUG Blog:
http://blog.rubyonrails.org.tw

CFC on Rails:
http://zusocfc.blogspot.com

Only two surfaces of a box:
http://blog.pixnet.net/zusocfc