Rails: запрос has_one через own_to добавляет PK null в запрос - PullRequest
0 голосов
/ 15 июня 2019

Я получаю сообщение об ошибке при попытке запросить отношение. Это мои модели:

class Course < ApplicationRecord
  belongs_to :subject, inverse_of: :courses
  # This is the important relation
  has_one :department, through: :subject
end

class Subject < ApplicationRecord
  belongs_to :department, inverse_of: :subjects
  has_many :courses, dependent: :destroy, inverse_of: :subject
end

class Department < ApplicationRecord
  has_many :subjects, dependent: :destroy
end

Дело в том, что если я сделаю:

> Course.where(department: Department.first)
  Department Load (0.3ms)  SELECT  `departments`.* FROM `departments` ORDER BY `departments`.`id` ASC LIMIT 1
  Course Load (0.7ms)  SELECT `courses`.* FROM `courses` WHERE `courses`.`id` IS NULL
=> []

Как видите, он включает WHERE courses.id IS NULL. В любом случае я могу получить доступ к этому отношению, выполнив:

> Course.joins(:subject).where(subjects: { department: Department.first })
  Department Load (0.4ms)  SELECT  `departments`.* FROM `departments` ORDER BY `departments`.`id` ASC LIMIT 1
  Course Load (0.5ms)  SELECT `courses`.* FROM `courses` INNER JOIN `subjects` ON `subjects`.`id` = `courses`.`subject_id` WHERE `subjects`.`department_id` = 1

И в результате я получаю много объектов, но мне хотелось бы знать, если я что-то упустил, чтобы заставить это работать.

Кстати, если я пытаюсь получить доступ к методу напрямую, он работает правильно:

> Course.first.department
  Course Load (0.9ms)  SELECT  `courses`.* FROM `courses` ORDER BY `courses`.`id` ASC LIMIT 1
  Department Load (0.6ms)  SELECT  `departments`.* FROM `departments` INNER JOIN `subjects` ON `departments`.`id` = `subjects`.`department_id` WHERE `subjects`.`id` = 1 LIMIT 1
=> #<Department:0x00007fc40dfab5f8
 id: 1,
 name: "Matemática",
 slug: "matematica",
 code: 1,
 created_at: Sat, 15 Jun 2019 20:49:33 UTC +00:00,
 updated_at: Sat, 15 Jun 2019 20:49:33 UTC +00:00>

Спасибо!

...