Rails删除数据库记录,10个最新条目除外

时间:2012-11-16 23:57:29

标签: ruby-on-rails-3 activerecord

我创建了一个名为“PostView”的模型。每次用户查看帖子时,它都会将其记录到数据库中(使用用户ID和帖子ID创建新记录)。

我只想在数据库中保留每个用户10条记录。因此,每次添加新记录时,我都想删除除最新10条记录以外的所有记录。

  1. 这有效吗?如果没有,你建议用什么方式记录用户/帖子的观点?
  2. 如何添加新记录并删除Rails中最新的10条记录?
  3. 谢谢!

2 个答案:

答案 0 :(得分:2)

这似乎会导致很多开销,并且你最好定期通过cron修剪数据库,或者如果你真的只需要最后10条记录,找到一种更有效的存储方式。但如果你不能这样做......

cutoff = PostView.where(:user_id => user_id, :post_id => post_id).
                  order('created_at DESC').
                  offset(10).first

PostView.where(:user_id => user_id, :post_id => post_id).
         where(['created_at <= ?', cutoff.created_at]).
         delete_all

答案 1 :(得分:0)

此命令查询与user_id和post_id匹配的所有记录,按照最新的记录对这些记录进行排序,并销毁该组中超出第10条最新记录的记录。

PostView.where(user_id: user_id, post_id: post_id).
         order('id desc').offset(10).destroy_all

您的问题的另一个解决方案是,不是每次都创建一个新的PostView记录,您可以更新第10个最旧的记录(如果存在),否则创建一个新记录。

pv = PostView.first(where: ["user_id = ? AND post_id = ?", user_id, post_id], 
                    order: "id desc", offset: 9) || PostView.new
pv.update_attributes(field1: value1, field2: value2, 
                     created_at: Time.now)