我想在商店中找到如下字段:
CO-1
CO-2
CO-3
...
我计划在before_create或after_create回调中执行此操作:
class Contact
include Mongoid::Document
after_create :set_reference_number
def set_reference_number
...
end
end
由于mongodb使用的是12字节的BSON类型而不是自动增量的整数,因此我不能简单地只获取保存记录的id值。我读到mongodb有一个findAndModify函数,它允许你递增一个字段,但我的字段将被存储为一个字符串,例如" CO-1&#34 ;.无论如何都要有效地实现我想要的东西而不诉诸于此:
def set_reference_number
prefix = self.is_a?(Contact) ? 'CO' : 'PR'
last_document = self.class.order_by([:created_at, :desc]).last
if last_document.present?
val = last_document.reference_number.match(/^\w+-(.+)/)[1].to_i
self.reference_number = "#{prefix}-#{val+1}"
else
self.reference_number = "#{prefix}-#{1}"
end
save!
end