我有一个这样的模型:
class Invoice
include Mongoid::Document
field :local, type: String
field :date, type: DateTime
field :total, type: Float
end
class LogInvoice
include Mongoid::Document
field :date, type: Date
field :local, type: String
field :summary, type: Hash
end
字段摘要是这样的哈希:
summary = {invoices : 0, amount : 0.0}
对于存储的每张发票,我必须在当天创建一个LogInvoice,其中包含LogInvoice.summary [:发票]中的发票总数(发票数)以及LogInvoice中的总金额(Invoice.total的总和) 。总结[:量]
如果发票存在,我必须更新当天的LogInvoice。
我无法知道某个对象是否存在,因为LogInvoice.find()会返回异常(如果不存在),那么如何更新现有对象LogInvoice或者如果不存在则创建它?
谢谢
答案 0 :(得分:1)
如果我理解了你的问题,你应该这样做:
my_invoice_criteria = Invoice.all # or Invoice.where date: the_date_I_want or anything else
my_invoice_criteria.each do |invoice|
log_invoice = LogInvoice.find_or_create_by date: invoice.obtain_proper_date
#Use this for atomic persistence
log_invoice.inc :"summary.invoices" => 1
log_invoice.inc :"summary.amount" => invoice.total
#Use this for standard persistence
log_invoice.summary[:invoices]+=1
log_invoice.summary[:amount]+=invoice.total
log_invoice.save
end