I need a way to do something when a certain model parameter is changed
in update, and want to do this at the model level. For example, if the
member.spouse_id is deleted, then somewhere during the update/save
process the Member model would make sure that the spouse's spouse_id
is also deleted. Or, if family.location is changed, to change the
location of all the family members.

The way I see to determine a change is to look at the record before it
is updated and compare with the incoming params that could change it.
For example, compare member.spouse_id with params[:record][:spouse].
If there is a change, I need to save the original value somewhere so
that the member will "know" what it was when it needs to take action
such as de-linking the old spouse.

For that, I've made an accessor, previous_spouse. So, in principle, I
can use a callback before the update takes place, and say
"record.previous_spouse = record.spouse". Then a model after_save
callback can take care of doing whatever is needed to the
original_spouse.

The problem is that I can't find a callback that works, one that is
called after the record has been retrieved but before it has been
updated. I tried (controller) do_update, but the record has not been
retrieved yet. Even if I retrieve and modify it, it will be discarded
and re-read, so the instance variable previous_spouse, not being saved
in the database, will be lost. The other option seems to be
(controller) before_update_save, but that's called after the record
has been modified, so the original value is already lost; I suppose it
could be retrieved from the database since the updated record has not
yet been saved, but that seems awkward.

Any ideas? Or am I missing a much simpler way of accomplishing the
whole task?

-- 
You received this message because you are subscribed to the Google Groups 
"ActiveScaffold : Ruby on Rails plugin" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/activescaffold?hl=en.

Reply via email to