Forum: Ruby on Rails updating attribute in model

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Allen W. (Guest)
on 2008-10-09 06:09
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
Maurício L. (Guest)
on 2008-10-09 06:14
(Received via mailing list)
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
Philip H. (Guest)
on 2008-10-09 06:16
(Received via mailing list)
> 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.
Allen W. (Guest)
on 2008-10-09 06:27
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
This topic is locked and can not be replied to.