带有一些嵌套模型的rails 5 left_joins查询

时间:2019-03-14 13:28:21

标签: ruby-on-rails ruby

我不明白如何编写一个好的查询。我尝试了类似的东西:

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

请帮帮我。谢谢!

1 个答案:

答案 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 } },然后将表名复数。

如果您有任何疑问,请告诉我您的处理方法。