0

Rails3でSTIを使用して設計したアクティビティストリームがあります。

ユーザーが作成時に10を超えるアクティビティアイテムを持っているかどうかを確認したいと思います。ユーザーがデータベースに11番目のアクティビティを作成するときに、最も古いレコード*基本的にユーザーが作成した最初のレコードなどを破棄するようにします。*このようにして、データベースから何千もの古い役に立たないレコードをクリーンに保ちます。

モデルレベルから始めることを想定していますが、モデルで「current_user」を定義したくないので、コントローラーに含める必要があります。

このタスクを実行するために助けをいただければ幸いです。私は、Railsでのこれらのタイプのより高度なタスクにかなり慣れていません。

4

1 に答える 1

3

このロジックを AR コールバックに接続できます。Activityクラスをモデル化するときに Rails の規則を守っていて、各アクティビティがユーザーに属していると仮定すると、モデルで次のことを簡単に実行できます。

after_save do |record|
  if Activity.where(:user => record.user).count >= 11
    Activity.where(:user => record.user).order('created_at asc').first.destroy
  end
end

これにより、データベースに対して3つのトランザクションが作成されると思います(1つはカウント用、もう1つは最初のレコードを見つけるため、もう1つはそれを削除するため)。毎回呼び出されるので、これを行うためのより効率的な方法があるかどうか疑問に思いますActivity#save...

于 2012-07-05T17:08:10.340 に答える