2012-05-06 57 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])