Ruby on rails ActiveRecord:选择限制的最大值
我正试图将下面的SQL查询转换为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)。嗯,也许是这
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('idModel=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。