updating attribute in model

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

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.

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.

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.

Philip Hallstrom 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