【发布时间】:2014-12-10 04:59:42
【问题描述】:
我的 Rails/Heroku/Postgres 应用中有一个 Item 模型,它充当文档,带有一些文本、一个 removed 标志和许多名为 Versions 的子模型。
我的生产数据库中有数百万行 Version 对象,其中父 Item 的 removed 标志被用户设置为 yes,我想从数据库中删除这些版本 (并将item 对象留在原处)。
我正在努力选择父项的 removed 标志设置为 true 的所有版本。这是我在version.rb 中的代码:
Version.all(:joins => :item, :limit => 20, conditions: { :items => { :removed => true } } ).each do |v|
v.delete
end
产生这个:
SELECT "versions".* FROM "versions" INNER JOIN "items" ON "items"."id" = "versions"."item_id" WHERE "items"."removed" = 't' LIMIT 20
DELETE FROM "versions" WHERE "versions"."id" = 1
... lots of DELETE FROM "versions"
当我在本地运行它时,它只会删除版本对象,但是当我在 Heroku Postgres 中将第一个 SQL 语句作为数据剪辑运行时,它也会选择项目对象。我知道内部联接是为了从两个表中进行选择,但我真的不明白这里发生了什么。我需要保持 item 对象完好无损。任何帮助将不胜感激!
【问题讨论】:
标签: ruby-on-rails postgresql activerecord heroku