Ruby on rails ActiveRecord:选择限制的最大值

Ruby on rails ActiveRecord:选择限制的最大值,ruby-on-rails,ruby,rails-activerecord,Ruby On Rails,Ruby,Rails Activerecord,我正试图将下面的SQL查询转换为ActiveRecord,它正在融化我的大脑 delete from table where id <= ( select max(id) from ( select id from table order by id limit 0, 10)); 从id应为的表中删除 销毁(你的订单(:id).max(:id)) 这是未经测试的。这样做的目的是删除某个对象返回的ID数组。我不知道您是否可以在一个查询中完成这一切(而不只是执行SQL)。嗯,也许是这

我正试图将下面的SQL查询转换为ActiveRecord,它正在融化我的大脑

delete from table where id <= (
select max(id) from (
    select id from table order by id limit 0, 10));
从id应为的表中删除

销毁(你的订单(:id).max(:id))

这是未经测试的。这样做的目的是删除某个对象返回的ID数组。我不知道您是否可以在一个查询中完成这一切(而不只是执行SQL)。

嗯,也许是这样

Model.destroy(Model.where('id <= ?', Model.order(:id).limit(10).pluck(:id).max))
Model.destroy(Model.where('id
Model=Model.order(:id)).limit(10)。last

Model.where(“id从您的SQL中,看起来您想从表中删除前10条记录。我相信到目前为止的大多数答案都是这样。这里有两个额外的选择:

基于MurifoX的版本:

Table.where(:id=>Table.order(:id).limit(10).pluck(:id)).destroy_all
Table.order(:id).limit(10).destroy_all
这将有效地执行(…)中的WHERE id

略短的版本:

Table.where(:id=>Table.order(:id).limit(10).pluck(:id)).destroy_all
Table.order(:id).limit(10).destroy_all
这将简单地抓取前10条记录并销毁

编辑:要获取除最近X个记录外的所有记录(例如10个),目前我唯一能想到的方法是:

 Table.order(:id).limit(Table.count - 10).destroy_all if Table.count > 10

本质上,抓取最早的记录,只留下最近的10条记录,然后销毁它们,假设表大小大于10。也许有更干净的方法可以做到这一点,但这是我现在能想象的唯一方法。

我想这不是一个我想指出的对象,小心删除,因为它不会触发任何回调。然而,Destroy会的。实际上,我想做的是限制表中的行数。因此,如果有11行,请删除1。15删除5。