nfm*_*nfm 2 attributes model initialization ruby-on-rails dry
Clients
有很多Invoices
.发票具有number
我想通过递增客户的先前发票号来初始化的属性.
例如:
@client = Client.find(1)
@client.last_invoice_number
> 14
@invoice = @client.invoices.build
@invoice.number
> 15
Run Code Online (Sandbox Code Playgroud)
我希望将此功能纳入我的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
Run Code Online (Sandbox Code Playgroud)
但是,我打电话时attributes[:client_id]
没有设置@client.invoices.build
.
发票的client_id
初始化方式和时间,以及何时可以使用它来初始化发票number
?我可以将这个逻辑放入模型中,还是必须将其放入控制器中?
生成将invoices_number
列添加到users表的迁移.然后在Invoice
模型中写这个:
class Invoice < ActiveRecord::Base
belongs_to :user, :counter_cache => true
...
end
Run Code Online (Sandbox Code Playgroud)
invoices_count
创建发票后,这将自动增加用户的属性.
这个怎么样:
class Invoice < ActiveRecord::Base
...
def initialize(attributes = {})
super
self.number = self.client.invoices.size + 1 unless self.client.nil?
end
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10706 次 |
最近记录: |