客户
有很多发票
。发票有一个 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
?我可以将此逻辑放入模型中,还是必须将其放入 Controller 中?
最佳答案
生成一个向用户表添加 invoices_number
列的迁移。然后在 Invoice
模型中这样写:
class Invoice < ActiveRecord::Base
belongs_to :user, :counter_cache => true
...
end
这将在创建发票后自动增加用户的 invoices_count
属性。
关于ruby-on-rails - 在 Rails 中实例化对象时如何初始化属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3058787/