0

Ruby on Rails 3.2.13 を使用していますが、新しいレコードを保存するプロセスを制限することなく、オブジェクトに関連付けられたデータベース レコードの量を制限したいと考えています。つまり、記事ごとに最大 10 件のレビューを保存し、10 件以上の新しいレビューが送信されたときに最も古いレビューを上書きするArticleクラスがあります。has_many :reviewsたとえば、その記事に対して新しいレビューが送信されたときにその記事に対して 10 件のレビューが送信された場合、最も古いレビューを取得して上書きしたいと思います (データベースに新しいレビューを作成せずに)。

特定の記事のデータベースに10件のレビューが存在する場合、他のすべての属性に加えて属性をReview上書きすることにより、モデルでそれを作成することを考えました。created_atつまり、新しいレコードを (新しい で) 作成することは避けたいのですが、id送信したばかりの新しいデータで最も古いレコードを更新して、最新の 10件のレビューを保存したいと考えています。FIFOキューのように機能するようです。

どうすればそれを作ることができますか?


: @bgates によって提案された解決策は良いかもしれませんが、@bgates の解決策を採用することによりids、時間の経過とともにレコードが大幅に増加するため、最も古いレコードを破棄してから新しい (またはその逆の) レコードを作成することは避けたいと思います (例: 1 、2、...、34、...、7897987987、...)新しいレビューが常に送信されるため、約 20 秒ごとに。の成長を心配する必要がありidsますか?

4

2 に答える 2

0

データベース層でそのようにする利点はありますか? Rails レベルでは、モデルにフックを追加する方が簡単ですafter_saveReview

def purge_old_reviews
  while article.reviews.count > 10
    article.reviews.first.destroy
  end
end

(article.reviews が古いものから順に並べ替えられていると仮定)

于 2013-07-24T21:35:26.133 に答える