2012-05-06 60 views
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"

回答

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 
0

你也可以压缩下来,一条线路:

self.update_attribute(:modification_histories, self.modification_histories.sort{ |x,y| y.date <=> x.date }[0...120])