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 次 |
| 最近记录: |