【发布时间】:2010-06-17 04:04:13
【问题描述】:
Clients 有很多 Invoices。发票有一个 number 属性,我想通过递增客户以前的发票编号来初始化该属性。
例如:
@client = Client.find(1)
@client.last_invoice_number
> 14
@invoice = @client.invoices.build
@invoice.number
> 15
我想将此功能添加到我的Invoice 模型中,但我不知道该怎么做。这是我想象的代码:
class Invoice < ActiveRecord::Base
...
def initialize(attributes = {})
client = Client.find(attributes[:client_id])
attributes[:number] = client.last_invoice_number + 1
client.update_attributes(:last_invoice_number => client.last_invoice_number + 1)
end
end
但是,当我调用@client.invoices.build 时,attributes[:client_id] 没有设置。
发票的client_id 是如何以及何时初始化的,我什么时候可以使用它来初始化发票的number?我可以将此逻辑放入模型中,还是必须将其放入控制器中?
【问题讨论】:
-
我不关注。您想要最后一张发票的编号(如序列号)还是希望 last_invoice_number 反映用户拥有多少张发票?
-
last_invoice_number 是每个客户的序列号。因此,如果我刚刚向客户 = 4 发送了一张发票,并且它的编号为 42,那么我发送给该客户的下一张发票的编号为 43。
标签: ruby-on-rails model attributes initialization dry