0
A
回答
1
你可以用回调做到这一点,像
class InvoiceLine < ActiveRecord::Base
after_destroy :calculate_invoice_sum
after_save :calculate_invoice_sum
belongs_to :invoice
def calculate_invoice_sum
if invoice
invoice.calculate_invoice_sum
end
end
end
class Invoice < ActiveRecord::Base
has_many :invoice_lines
def calculate_invoice_sum
# assuming InvoiceLine has an amount attribute
total = invoice_lines.sum(&:amount)
update_attribute(:sum, total)
end
end
你可能想before_
回调,而不是after
,但我觉得更有意义,在这种情况下
http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html
http://api.rubyonrails.org/classes/Enumerable.html#method-i-sum
后
1
有counter_cache
选项,你可以传递给belongs_to
关联。在invoices
表
class InvoiceLine < ActiveRecord::Base
belongs_to :invoice, dependent: :destroy, counter_cache: :sum_column
end
请注意,你应该有列名sum_column
(对,上面的例子):对于你的模型,你定义belongs_to
关联如下。
相关问题
- 1. Rails - 更新记录?
- 2. (ActiveRecord)update_attributes不更新数据库记录
- 3. 在Rails中的一个ActiveRecord事务中更新多条记录
- 4. 更新/删除JoinTable记录用ActiveRecord
- 5. Rails ActiveRecord更新问题
- 6. Rails从表单更新ActiveRecord
- 7. Rails ActiveRecord.new创建新记录而不是更新现有记录
- 8. Rails 5 beta 3 ActiveRecord记录无效
- 9. Rails:在activerecord集合中查找记录
- 10. Rails的ActiveRecord的插入记录结果
- 11. activerecord without Rails:获取相关记录
- 12. 未找到记录rails 5 ActiveRecord错误
- 13. ActiveRecord :: ActiveRecordError(无法触及新的记录对象)rails 4
- 14. 可以使用Rails的ActiveRecord #save方法来更新现有记录吗?
- 15. 使用一个查询在Rails中与ActiveRecord同时更新多个记录?
- 16. rails 5 API;更新单个记录
- 17. Rails:更新控制器中的记录
- 18. Rails 4 - 保存/更新嵌套记录
- 19. 更新多对多记录的Rails
- 20. Rails查询不返回更新记录
- 21. 更新Rails中的孤立记录
- 22. Rails - 破坏前更新记录
- 23. Ruby on Rails:定时更新表记录
- 24. 在Rails中更新大型记录集
- 25. Ruby on Rails更新连接表记录
- 26. Ruby on Rails,活动记录更新
- 27. 在rails中更新表中的记录
- 28. Rails,更新邀请系统的记录
- 29. Rails的不的update_attributes更新记录
- 30. 更新记录 - Ruby On Rails 3.1
我的猜测是他想要总和每个invoice_line的金额,第i个墨水counter_cache将只更新invoice_line记录的计数? – house9
同样的问题发生在我身上。它如何知道总结哪个invoiceline专栏?如果它只是计数好的子记录也是有用的,但我希望把所有的记录总和记为@ house9所说的 – ZoolWay