glenn.verhalle-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
2008-Jan-03 13:09 UTC
Model question
Situation: we''re creating an application for orders and order
tracking.
base class : Qoi (quotations, orders, invoices).
Quotations < Qoi, Orders < Qoi , Invoices < Qoi
Each Qoi has_many :line_items (each line item has unit price,
amount,...)
Each line_item
--> has_many :rfq_of (Request_for-Quote + Order_Form)
for some items we must ask for price to our suppliers so we must
create one or more requests for quote
and
--> has_many :log_items
These are used for logging deadlines, phone calls...
When a Quotation becomes an Order we copy the line_items. This way we
can keep track when things change during the lifetime of an order (eg
the amount changes, so we can still see that in the Quotation we
offered 3 MacBooks, but the client ordered only 2.
Now the problems start to bubble up... When copying a line_item we
loose the relation to all rfq_of and log_items...
We tried to solve this using an extra id in a line_item : base_id.
When creating a new line_item we set base_id = id, when copying a
line_item, base_id is just copied. This way we can track back to the
original line_item and find all rfq_of''s and log_items...
We would need a relation from base_id (in line_items) to
line_item_base_id (in rfq_of), but afaik rails doesn''t support
relations that start from a differente field than id....
We could do this in a few ways:
1) in line items we could write : belongs_to :base_record, :class =>
"LineItem", :foreign_key => :base_id
this way we can retrieve the ''base'' record and it''s
rfq''s via:
@line_item.base_record.rfqs
---> is will give us trouble if for some reason the original line_item
in the Quotation is deleted...
2) we could not use relations but do a find
RfqOf.find(:all, :conditions {:line_item_base_id => base_id})
I can''t give a logical explanation but we don''t like this
solution, it
looks overly complex. And we will need to write a lot of ''search
methods for everything
Both solutions also have the problem that we can''t use :dependent
=> :destroy, in the first case rfq_of''s would be destroyed if the
base
line_item was destroyed, in the second case it can''t be automated.
Rfq_of (and log_items) should be destroyed if all line_items of the
same family (same base_id) are destroyed.
Is there better way, either by not using the base_id or a completely
different structure... (extra table, wrapper,..)
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---