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

1 行に圧縮することもできます。

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