0

我有一组位于产品对象内部的历史项目:

 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"

4

2 回答 2

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
于 2012-05-06T19:26:19.940 回答
0

您也可以将其压缩为一行:

self.update_attribute(:modification_histories, self.modification_histories.sort{ |x,y| y.date <=> x.date }[0...120])
于 2012-05-06T19:31:09.783 回答