【发布时间】:2016-01-15 18:30:22
【问题描述】:
我正在尝试删除所有不再有任何users 的organizations。
使用下面的代码,我可以找到我想删除的所有记录:
Organization.includes(:users)
.where(users: { id: nil })
.references(:users)
当我添加delete_all 时,如果我没有添加references,我会得到同样的错误:
PG::UndefinedTable: ERROR: missing FROM-clause entry for table "users"
我可以用纯 SQL 编写解决方案,但我不明白为什么在添加 delete_all 语句时 Rails 没有保留对 users 的引用。
这里有更多细节:
Organization:
has_many :users
User:
belongs_to :organization
【问题讨论】:
-
不应该是
User.includes(:organizations)...吗? -
我更新了问题,我也改变了一些关系
-
您能否发布定义组织和用户之间关联的代码?
-
我更新了一些细节。如果你还想要什么,请告诉我
-
@IvanSelivanov 那个特定的已经在 Rails 4 中修复了。虽然它没有用,因为
joins做了一个INNER JOIN,它不会捕获没有用户的组织。这是一种真正“缺少功能”的错误,必须先设计功能......
标签: ruby-on-rails postgresql ruby-on-rails-4 activerecord arel