我需要一次性刪除大量記錄,並且需要根據另一個與「belongs_to」關係相關的模型中的條件來執行此操作。我知道我可以通過每次檢查條件來進行循環,但是這對於我的大型記錄集來說是永久的,因爲對於每個「belongs_to」它都會進行單獨的查詢。是否有可能delete_all與內部連接條件?
下面是一個例子。我有一個「產品」模型,「屬於」一個「藝術家」,並可以說藝術家有一個屬性「is_disabled」。
如果我想刪除屬於殘疾人藝術家的所有產品,我希望能夠做這樣的事情:
Product.delete_all(:joins => :artist, :conditions => ["artists.is_disabled = ?", true])
這可能嗎?我之前已經直接在SQL中完成了這項工作,但不確定是否可以通過rails來完成。
它是如何 「理當如此」 刪除連接?通常需要加入條件才能限制要刪除的記錄。我認爲最糟糕的部分是它的默默無聞,這可能是相當令人驚訝的。 – 2014-09-18 21:55:10
我只是說你無法做一個連接刪除所有像SQL一樣的東西,因此正確的如此。我很確定Rails的後續版本總是進行子查詢。不確定這是最好的方法,因爲它使它看起來是聯接中的下層查詢,因爲它確實是一個子查詢。 – gcastro 2014-11-09 20:32:59
@gcastro這是不真實的 - 在MySQL中至少有一個可以絕對使用連接語句執行刪除。 http://dev.mysql.com/doc/refman/5.7/en/delete.html – bluefear 2016-10-27 00:29:49