0

所以,情况是这样的:

我有一个名为 invoice 的表,它有一个名为 invoice # 的列,每次将其保存到数据库之前,我都必须生成一个复杂的发票编号。此外,我还有另一个名为 invoice_item 的表,它将存储一堆项目。每个项目还有一个名为 invoice # 的列,用于声明该项目属于哪个发票。一张发票中的物品数量没有限制。

现在,我有两种策略来实现这一目标:

  1. 我有一个名为 generateCode() 的函数来返回随机发票#。我会把它放在application_controller.rb中,并且每次我们尝试插入新发票时,invoice_controller中的“create”方法都会生成一个新的发票#,并将值传递给属于该发票的所有invoice_items .

  2. 我将使用 ActiveRecord 回调函数:after_initialize,因此,当我们尝试新建一个发票实例时,也会创建发票#,并且很容易将值传递给项目列表。

似乎第二种方式有更多的逻辑,但它是否有可能导致性能问题?并且在大多数电子商务网站中,用户最有可能在提交购物清单后得到他们的发票#。所以我想知道做这类问题的典型方法是什么,更重要的是,为什么?

谢谢

4

1 回答 1

1

after_initialize每次实例化 ActiveRecord 对象时都会运行,这意味着当您invoice_items从数据库中检索时,它们将获得新的发票编号(不是您想要的)。

您应该使用的回调是before_create,它将在新对象保存到数据库之前触发它们。

于 2012-10-24T01:13:15.167 回答