2012-07-24 91 views
0

我找咨询如何做一些事情我一直想在过去做了很多次,这使我相信,有一种设计模式(可能宝石,或例如)如何做到我想要达到的目标。映射ActiveRecord对象来创建新的对象

我目前在Rails上工作,涉及一个涉及多种订单类型的项目。例如,我有一个需要生成货件的基本订单。订单中的数据需要“映射”到新创建的货件。 (很简单的例子:)

Order
- 来自:纽约
- 到:LA
- SHIPPING_TYPE:联邦快递

Shipment
- 来自:LA
- 到:纽约
- SHIPPING_TYPE:联邦快递

秩序出货将有几乎相同的领域,对未成年人的区别之一是,“”和“”域切换。在现实世界中,这些对象中的每一个都有更多的领域。还有许多其他类型的订单需要“地图”。

在试图让事情DRY兴趣,有没有一种方法来创建这些命令之间的映射,这样我就可以最大限度地减少的时候,我会写一个generate_order_from(order)方法是多少?

编辑:我试图创建一个类似RestKit's Object Mapping的方法。我在Ruby中找不到类似的东西。

回答

0

订单和出货将具有几乎相同的字段......在现实世界中,这些对象中的每一个都有许多许多字段。

也许这是你的问题?如果您有很多字段,并且其中大部分字段在订单和货件中都是相同的,则应该将公共字段放入由订单和货件共享的单独对象中(在数据库中,这相当于将您的标准化表)。然后,您只需映射实际更改的字段(如切换fromto字段)。

+0

谢谢,卡萨布兰卡。我将所有共享字段都拉到另一个名为“Order”的对象中,该对象由数据库支持。然而,项目需求需要全面审计,这消除了不同订单共享相同基础对象的能力,因为采购订单可能会生成多个货件。我试图创建一个类似于[RestKit的对象映射]的方法(https://github.com/RestKit/RestKit/blob/master/Docs/Object%20Mapping.md)。 – Semyaz 2012-07-25 13:26:29