ruby-on-rails – 是否可以使用内部连接条件delete_all?
发布时间:2020-12-17 01:20:24 所属栏目:百科 来源:网络整理
导读:我需要一次删除大量记录,我需要根据另一个与“belongs_to”关系相关的模型中的条件来执行此操作.我知道我可以遍历每个检查条件,但这需要我的大记录集永远,因为对于每个“belongs_to”它会进行单独的查询. 这是一个例子.我有一个“产品”模型,“belongs_to”
我需要一次删除大量记录,我需要根据另一个与“belongs_to”关系相关的模型中的条件来执行此操作.我知道我可以遍历每个检查条件,但这需要我的大记录集永远,因为对于每个“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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读