Я прошу прощения за надуманный пример
A person
имеет ОДИН journey
, но напрямую не связан с этим journey
, вместо этого они подключены через свои house
и office
.
A person belongs_to a house
, house has_many people
A person belongs_to a office
, office has_many people
A journey belongs_to a house
, house has many journeys
A journey belongs_to a office
, a office has many journeys
+---------+
+---Belongs-To----> <----Belongs-To--+
| | House | |
| +-Has-Many-----+ +-----Has-Many-+ |
| | +---------+ | |
| | | |
+------+--v+ +v-+--------+
| | | |
| Person | | Journey |
| | | |
+------+--^+ +^-+--------+
| | | |
| | +----------+ | |
| +-Has-Many-----+ +----Has-Many-+ |
| | Office | |
+----Belongs-To---> <---Belongs-To--+
+----------+
Как следует из этого надуманного примера, как лучше всего разрешить следующее:
person.journey
ИЛИ, исключая запрос на соединение с несколькимитаблиц (с использованием хэшей ruby) или has_one_through
с дополнительными ограничениями таблиц.
У нас есть SQL-запрос, но мы бы предпочли не использовать raw SQL, если можем, но он выглядит так:
Person
.joins('INNER JOIN journeys
ON journeys.office_id = person.office_id
AND journeys.house_id = person.house_id')