rails 5 запрос left_joins с несколькими вложенными моделями - PullRequest
0 голосов
/ 14 марта 2019

Я не понимаю, как написать хороший запрос.Я пробовал что-то вроде:

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 голосов
/ 14 марта 2019

Попробуйте следующее:

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 } } и умножить имена таблиц.

Дайте мне знать, как вы справляетесь с этим / если у вас есть какие-либо вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...