Ruby on Rails - 保存随机发票的策略#

时间:2012-10-24 00:39:52

标签: ruby-on-rails

所以,情况是这样的:

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

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

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

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

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

    由于

1 个答案:

答案 0 :(得分:1)

每次实例化ActiveRecord对象时,

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

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