如果用户拥有10个以上,Rails 3会破坏数据库中最旧的项目

时间:2012-07-05 16:39:33

标签: ruby-on-rails-3 android-activity model sti

我有一个我在rails 3中使用STI设计的Activity流。

我想检查用户是否在创建时有超过10个活动项目。当用户在数据库中创建他的第11个活动时,我希望它销毁最旧的记录*基本上是用户制作的第一个记录等等。*这样我就可以保持数据库清理成千上万条旧的无用记录。

我假设我会从模型级开始,但由于我不想在模型中定义“current_user”,它应该在控制器中。

任何帮助都会受到赞赏以完成这项任务,我对这些类型的更高级的rails任务很新。

1 个答案:

答案 0 :(得分:3)

您可以在AR回调中挂起此逻辑。假设您在为类建模时保留了rails约定,并且每个活动都属于用户,那么您可以在Activity模型中轻松执行以下操作:

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

我想这会为db创建三个事务(一个用于count,另一个用于查找第一个记录,另一个用于删除它)。我想知道是否有更有效的方法来执行此操作,因为它将在每个Activity#save上调用...