我不明白如何编写一个好的查询。我尝试了类似的东西:
Users.where(id: params[:ids]).left_joins(:worker)
.where(worker: { worker: { leader_id: nil } }).destroy_all
和
User.left_joins(:worker).where(worker: {Worker.left_joins(:crews).where(crews: { crews: {leader_id: nil}})})
但是它没有用:(而且我不知道该怎么做
这是我的协会:
User.rb
has_one :worker, dependent: :destroy
Worker.rb
has_many :crews, foreign_key: 'leader_id', dependent: :destroy
Crew.rb
has_many :workers, through: :crew_workers
crews_schema:
create_table "crews", force: :cascade do |t|
t.integer "leader_id"
end
请帮帮我。谢谢!
答案 0 :(得分:0)
尝试以下操作:
Users.where(id: params[:ids]).left_joins(:worker)
# pluralised here:
.where(workers: { leader_id: nil }).destroy_all
# ^^^
传递到left_joins
的参数反映了关联(即:worker
),尽管where
子句需要表名(通常为workers
复数形式),这可能会导致此类查询中断。
您还有一个额外的哈希包装该查询。
并且:
User.left_joins(worker: :crews)
.where(workers: { crews: { leader_id: nil } })
对于后者,您还可以嵌套连接,例如one: { two: { three: :four } }
,然后将表名复数。
如果您有任何疑问,请告诉我您的处理方法。