所以,情况是这样的:
我有一个名为invoice的表,它有一个名为invoice#的列,我必须在每次保存到数据库之前生成一个复杂的发票号。 此外,我有另一个名为invoice_item的表,它将存储一堆物品。每个项目还有一个名为invoice#的列,用于声明该项目属于哪个发票。 一张发票中有多少件物品没有限制。
现在,我有两种策略来实现这一目标:
我有一个名为generateCode()的函数来返回随机发票#。我将把它放在application_controller.rb中,每当我们尝试插入新发票时,invoice_controller中的方法“create”将生成一个新发票#,并将该值传递给属于发票的所有invoice_items
我将使用ActiveRecord回调函数:after_initialize,因此,当我们尝试新建发票实例时,也会创建发票#,并且很容易将值传递给项目列表。< / p>
似乎第二种方式有更多逻辑,但它是否有机会导致性能问题?在大多数电子商务网站中,用户最有可能在提交购物清单后获得#发票。所以我想知道做这类问题的典型方法是什么,更重要的是,为什么?
由于
答案 0 :(得分:1)
after_initialize
都会运行,这意味着当您从数据库中检索invoice_items
时,它们将获得新的发票号(不是您想要的)。
您应该使用的回调是before_create
,它会在新对象保存到数据库之前触发。