我创建了一个名为“PostView”的模型。每次用户查看帖子时,它都会将其记录到数据库中(使用用户ID和帖子ID创建新记录)。
我只想在数据库中保留每个用户10条记录。因此,每次添加新记录时,我都想删除除最新10条记录以外的所有记录。
谢谢!
答案 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)