Updating attribute in model


#1

I’m trying to make a change to a field in the model whenever someone
accesses it and it’s incorrect. So I have the following in my
ActiveRecord class:

def status
prev_status = read_attribute(:status)
if end_date < Date.today
update_attribute(:status, “Expired”)
end
status
end

I’m getting a “stack level too deep error”. Any suggestions on how to
fix and the correct approach to this.

thanks


#2

Hi Allen,

I’m not sure, but this seems to be a before or after save filter, if
it’s before_save, instead of update_attribute, just call
write_attribute, when the model is saved it will automatically save
this new value, if it’s an after filter, make it a before one.

On Wed, Oct 8, 2008 at 11:09 PM, Allen W.
removed_email_address@domain.invalid wrote:

status


Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) | http://blog.codevader.com/
(en)
João Pessoa, PB, +55 83 8867-7208


#3

end

I’m getting a “stack level too deep error”. Any suggestions on how to
fix and the correct approach to this.

You’re calling status from within status so it’s recursing forever.

Replace that last status with read_attribute(:status) after perhaps
reloading the object to ensure you’ve got the latest.


#4

Philip H. wrote:

end

I’m getting a “stack level too deep error”. Any suggestions on how to
fix and the correct approach to this.

You’re calling status from within status so it’s recursing forever.

Replace that last status with read_attribute(:status) after perhaps
reloading the object to ensure you’ve got the latest.

Yeah that is was. Simple calling

‘read_attribute(:status)’ instead of ‘status’ did the trick. thanks