使用Rails 4在Mongoid中创建或增加一个字段

时间:2013-12-08 18:48:40

标签: ruby-on-rails ruby-on-rails-4 mongoid

我有一个这样的模型:

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或者如果不存在则创建它?

谢谢

1 个答案:

答案 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

价: Atomic persistence文档 Standard persistence文档