Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails控制台-删除所有不在';我没有任何联系_Ruby On Rails_Activerecord_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails Rails控制台-删除所有不在';我没有任何联系

Ruby on rails Rails控制台-删除所有不在';我没有任何联系,ruby-on-rails,activerecord,ruby-on-rails-4,Ruby On Rails,Activerecord,Ruby On Rails 4,所以,我有一个模型房子,一个房子可以有很多房间 我想删除没有房间的房屋的所有记录 我试过了 House.includes(:room).having('room.id IS NULL') 哪些是错误,哪些是错误 House.all().where(:room.count == 0) 还有很多其他我也尝试过的方法 我可能遗漏了一些非常简单的东西,有人有什么想法吗?关联应该是复数的 House.includes(:rooms).where(rooms: { id: nil }).count 您

所以,我有一个模型房子,一个房子可以有很多房间

我想删除没有
房间的
房屋
的所有记录

我试过了

House.includes(:room).having('room.id IS NULL')
哪些是错误,哪些是错误

House.all().where(:room.count == 0)
还有很多其他我也尝试过的方法


我可能遗漏了一些非常简单的东西,有人有什么想法吗?

关联应该是复数的

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,直接使用
join
执行
DELETE
语句,关联应该是复数的

House.includes(:rooms).where(rooms: { id: nil }).count
House.includes(:rooms).where('rooms.id IS NULL')
您应该能够使用

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,直接使用
join

执行
DELETE
语句这是正确获取计数,但在DELETE\u all上抛出一个no-This列:rooms.id:error。尽管House>有许多房间,但它似乎正在尝试在House中查找rooms.id?不确定
delete\u all
在内部如何工作。您可以始终执行两个单独的查询,我将更新答案。您是否可以尝试将
包含(:rooms)
替换为
连接(:rooms)
?这是正确获取计数,但在删除所有项时抛出一个无此列:rooms.id:错误。尽管House>有许多房间,但它似乎正在尝试在House中查找rooms.id?不确定
delete\u all
在内部如何工作。您始终可以执行两个单独的查询,我将更新答案。您是否可以尝试将
包含(:rooms)
替换为
连接(:rooms)
House.includes(:rooms).where('rooms.id IS NULL')