我有一系列位于产品对象内的历史记录项:
class Product
include Mongoid::Document
include Mongoid::Paranoia
include Mongoid::Timestamps
...
embeds_many :modification_histories
我的商业规则是只保存了最后120个历史记录。所以当添加一个新的时,我会对旧的那些进行排序并弹出数组:
if self.modification_histories.size >= 120
self.modification_histories.sort! { |x,y| y.date <=> x.date }
while self.modification_histories.size >= 120
self.modification_histories.pop
end
end
这似乎工作正常,我在调用该方法后设置了断点,历史数组的大小正确。但是当我保存对象(self.save!
)然后重新加载它时,历史数组没有被更改。我不明白我做错了什么。
gem "mongoid", "~> 2.4"
答案 0 :(得分:0)
简答:将数组复制到另一个数组中。而不是:
self.modification_histories.sort! { |x,y| y.date <=> x.date }
做
arr = self.modification_histories.sort { |x,y| y.date <=> x.date }
while arr.size >= 120
arr.pop
end
self.modification_histories = arr
答案 1 :(得分:0)
你也可以将它压缩成一行:
self.update_attribute(:modification_histories, self.modification_histories.sort{ |x,y| y.date <=> x.date }[0...120])