Hi,
In Agile Web D. with Rails section on Transactions (p 381)
there are two main examples.
- making changes in two records in the same database table
- making changes in two records each in a different database
I want to do what is in between: changes in two records each in a
different table of the same database. Suppose they are apples and
oranges tables.
How do I write this?
Do I need to be as elaborate as this and will it work?
apple = Apple.find(:first)
orange = Orange.find(:first)
Apple.transaction(apple) do
Orange.transaction(orange) do
apple.update_attributes(params[:apple])
orange.update_attributes(params[:orange])
end
end
Or can I just write something much simpler like this?
Apple.transaction(apple, orange) do
apple.update_attributes(params[:apple])
orange.update_attributes(params[:orange])
end
Will the above be a problem since orange is not an Apple?
In the rails docs there is something even simpler
transaction do
apple.update_attributes(params[:apple])
orange.update_attributes(params[:orange])
end
but I think this version won’t restore the apple and orange instances
back to their previous state if the transaction fails.
What I don’t understand is the class name that preceeds
“.transaction”. Does that class name make a transaction for just that
table or with the entire database associated with that table?
Any help greatly appreciated.
Thanks,
Peter