2013-12-16 45 views
1

所以,我有一個型號House,和一個房子可以have_manyRoom s。Rails控制檯 - 刪除所有沒有任何關聯的記錄

我想刪除一些沒有Room S的House所有記錄。

我已經試過

House.includes(:room).having('room.id IS NULL') 

哪些錯誤,一樣

House.all().where(:room.count == 0) 

和我沿着相同的路線嘗試過很多其他的事情。

我可能錯過了一些非常簡單的事情,任何人有任何想法?

回答

4

該協會應該是複數

House.includes(:rooms).where(rooms: { id: nil }).count 

而且你應該能夠使用

ids = House.includes(:rooms).where(rooms: { id: nil }).pluck(:id) 
House.where(id: ids).delete_all 

# Note: I'm leaving this as reference. It seems to raise an error. 
# House.includes(:rooms).where(rooms: { id: nil }).delete_all 

否則,您可以用純SQL的一點點工作,將其刪除,並直接使用執行DELETE聲明一個join

+0

這是獲得正確的計數,但扔沒有這樣的列:在DELETE_ALL錯誤:rooms.id。它看起來好像試圖在House中找到rooms.id,儘管House> has_many房間? – Advocation

+0

不知道'delete_all'如何在內部工作。您始終可以執行兩個單獨的查詢,我會更新答案。 –

+0

你可以嘗試用'joins(:rooms)'替換'includes(:rooms)'嗎? –

1
House.includes(:rooms).where('rooms.id IS NULL') 
相關問題