# Handling association changes? What's the best practice?

**URL:** <https://www.ruby-forum.com/t/handling-association-changes-whats-the-best-practice/148900>\
**Category:** Rails\
**Created:** [September 18, 2008, 5:18am UTC](https://www.ruby-forum.com/t/handling-association-changes-whats-the-best-practice/148900 "2008-09-18T05:18:54Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Danimal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/bb73d2/32.png) [@Danimal](https://www.ruby-forum.com/u/Danimal)\
**Post date:** [September 18, 2008, 5:18am UTC](https://www.ruby-forum.com/t/handling-association-changes-whats-the-best-practice/148900/1 "2008-09-18T05:18:54Z")

</div>

Hello all!

I have a conundrum that I’m _sure_ someone else has already thought of  
and solved. How does one best handle the scenario of association  
object changes and data integrity?

For example, if I have a standard ecommerce site that sells Products  
and people can have Orders and an Order has\_many Products… then,  
what happens if Product #3 is part of Order #2 but at some point, the  
shop owner goes in and edits Product #3 to change it’s description…  
or it’s price… or marks it as “no longer for sale”? Now, Order #2 is  
referencing Product #3 via the association but the data in Product #3  
is no longer the right data for the Order?

I can imagine a number of ways to handle this, but none of them seem  
ideal. I’m curious what people do in this type of (very?) common  
scenario.

Thanks!

-Danimal

---

<div class="post-metadata">

**Author:** ![Danimal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/bb73d2/32.png) [@Danimal](https://www.ruby-forum.com/u/Danimal)\
**Post date:** [September 18, 2008, 5:22am UTC](https://www.ruby-forum.com/t/handling-association-changes-whats-the-best-practice/148900/2 "2008-09-18T05:22:59Z")

</div>

> is no longer the right data for the Order?
> 
> I can imagine a number of ways to handle this, but none of them seem  
> ideal. I’m curious what people do in this type of (very?) common  
> scenario.

Once a product is put into an order it becomes a “line item”. The  
line item has the sku, quantity and price at the time it was added.  
I’d also put in a description which would be the product name and you  
may as well associate it with the product, but don’t ever look at the  
product’s price – just the line items price.

In the case where you want to delete a product, simply flag it as  
unavailable/old/expired/hidden or something instead. That way you can  
still go see the original product from a given order if you wanted to.

-philip

---

<div class="post-metadata">

**Author:** ![Danimal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/bb73d2/32.png) [@Danimal](https://www.ruby-forum.com/u/Danimal)\
**Post date:** [September 18, 2008, 5:35am UTC](https://www.ruby-forum.com/t/handling-association-changes-whats-the-best-practice/148900/3 "2008-09-18T05:35:15Z")

</div>

Philip,

Thanks for the post. This was kind of what I was thinking… but I am  
still unsure about it (or some of it). For example, what if the  
product has a detailed description that includes something like  
“includes 2 free wuzzits”. And so I order that product. But later, the  
store owner changes the description to say “includes 3 free wuzzits”.  
It’s still the same product, but the description is different. So  
would you include the description on the line item?

And what about the case where it’s not a product that’s offered but  
more like a service. I guess you could still consider a line item for  
the service, but it’s fuzzier, at least to me.

I’ve thought of: having “locked” products (or services) that can’t be  
changed… just disabled.  
I’ve thought of including all the necessary fields on the “line item”  
record  
I’ve thought of using versioning (a couple plugins out there)  
I’ve thought of doing nothing but having the application make it clear  
to the store owner that if they materially change information about a  
product or service, it will be reflected in previous orders.

None of these seem perfect… they each have their pluses and minuses.

Any more thoughts/advice?

Thanks,

-Danimal

---

<div class="post-metadata">

**Author:** ![Danimal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/bb73d2/32.png) [@Danimal](https://www.ruby-forum.com/u/Danimal)\
**Post date:** [September 18, 2008, 9:00am UTC](https://www.ruby-forum.com/t/handling-association-changes-whats-the-best-practice/148900/4 "2008-09-18T09:00:14Z")

</div>

Select\_Description\_Products\_Orders\_1\>3

---

<div class="post-metadata">

**Author:** ![Danimal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/bb73d2/32.png) [@Danimal](https://www.ruby-forum.com/u/Danimal)\
**Post date:** [September 18, 2008, 9:00am UTC](https://www.ruby-forum.com/t/handling-association-changes-whats-the-best-practice/148900/5 "2008-09-18T09:00:13Z")

</div>

What’s sku?

---

<div class="post-metadata">

**Author:** ![Danimal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/bb73d2/32.png) [@Danimal](https://www.ruby-forum.com/u/Danimal)\
**Post date:** [September 18, 2008, 10:17am UTC](https://www.ruby-forum.com/t/handling-association-changes-whats-the-best-practice/148900/6 "2008-09-18T10:17:34Z")

</div>

On Sep 18, 11:29 am, “cherrian harada” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> What’s sku?

Stock-Keeping Unit

> **[Stock keeping unit](https://en.wikipedia.org/wiki/Stock_Keeping_Unit)**
>
> In inventory management, a stock keeping unit (abbreviated as SKU and pronounced /ˌɛsˌkeɪˈjuː/ ESS-KAY-YOO or /ˈsk(j)uː/ SK(Y)OO) is the unit of measure in which the stocks of a material are managed. Or to put it another way; it is a distinct type of item for sale, purchase, or tracking in inventory, such as a product or service, and all attributes associated with the item type that distinguish it from other item types (for a product, these attributes can include manufacturer, description, SKU c...

---

<div class="post-metadata">

**Author:** ![Danimal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/bb73d2/32.png) [@Danimal](https://www.ruby-forum.com/u/Danimal)\
**Post date:** [September 19, 2008, 8:04am UTC](https://www.ruby-forum.com/t/handling-association-changes-whats-the-best-practice/148900/7 "2008-09-19T08:04:29Z")

</div>

Hi! Does this group have a Q/A page?  
It seems I get alot people sending questions to my address with some  
inquiries, I really don’t mind it. It actually, feels good and I sort  
like  
it… only problem is I don’t have the answers to give these questions  
for  
each person. If I have some reference I probably could help…Wish I  
did  
because I would consider myself a big help to this RoR community.  
Unfortunately, I not at that level, to independently reply to these  
queries yet…  
Wish I could be a bigger help to you guys, I also have my questions on  
RoR  
too…  
Cherri

---

<div class="post-metadata">

**Author:** ![Danimal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/bb73d2/32.png) [@Danimal](https://www.ruby-forum.com/u/Danimal)\
**Post date:** [September 19, 2008, 8:42am UTC](https://www.ruby-forum.com/t/handling-association-changes-whats-the-best-practice/148900/8 "2008-09-19T08:42:37Z")

</div>

On Sep 19, 2:03 pm, “cherrian harada” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Cherri  
> Because you’re a member of the group, you’ll receive every message  
> sent to the group.

---

<div class="post-metadata">

**Author:** ![Danimal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/bb73d2/32.png) [@Danimal](https://www.ruby-forum.com/u/Danimal)\
**Post date:** [September 19, 2008, 10:23am UTC](https://www.ruby-forum.com/t/handling-association-changes-whats-the-best-practice/148900/9 "2008-09-19T10:23:05Z")

</div>

O\>K! I see…+;)
