gpt4 book ai didi

ruby-on-rails - 是否可以使用内部连接条件 delete_all ?

转载 作者:行者123 更新时间:2023-12-04 03:34:23 25 4
gpt4 key购买 nike

我需要一次删除大量记录,我需要根据另一个模型中与“belongs_to”关系相关的条件来删除。我知道我可以遍历每个条件检查,但是对于我的大记录集,这需要永远,因为对于每个“belongs_to”,它都会进行一个单独的查询。

这是一个例子。我有一个“产品”模型,它“属于”一个“艺术家”,可以说艺术家有一个“is_disabled”属性。

如果我想删除属于残疾艺术家的所有产品,我希望能够执行以下操作:

Product.delete_all(:joins => :artist, :conditions => ["artists.is_disabled = ?", true])

这可能吗?我之前直接在 SQL 中完成了此操作,但不确定是否可以通过 Rails 完成。

最佳答案

问题是 delete_all 丢弃了所有的连接信息(这是正确的)。您想要做的是将其捕获为内部选择。

如果您使用的是 Rails 3,您可以创建一个范围来满足您的需求:

class Product < ActiveRecord::Base
scope :with_disabled_artist, lambda {
where("product_id IN (#{select("product_id").joins(:artist).where("artist.is_disabled = TRUE").to_sql})")
}
end

你查询电话然后变成
Product.with_disabled_artist.delete_all

您也可以使用相同的内联查询,但这不是很优雅(或自我记录):
Product.where("product_id IN (#{Product.select("product_id").joins(:artist).where("artist.is_disabled = TRUE").to_sql})").delete_all

关于ruby-on-rails - 是否可以使用内部连接条件 delete_all ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4235838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com