Модели:ActiveModel пройти вверх по дереву
Companies(has_many) -> (belongs_to)Clients(has_many) -> (belongs_to)Properties
Получение списков спускаясь легко сделать:
company.clients -> shows all clients for that company
client.properties -> show all properties for that client
То, что я хочу сделать, это, чтобы показать все свойства (маршрут: properties_path), но только для одной компании и предоставления ссылки клиенту в представлении.
У меня есть несколько решений:
- Пишущие правое внешнее соединение в SQL (использует SQLite в моем окр развития так нужно Postgress, чтобы заставить его работать)
- перебором Сквозные: получить все клиенты для этой компании, а затем принести на клиента все свойства в 1-хэша
Так м Вопрос в том, есть ли более элегантный и, возможно, рельсы способ сделать это, что я пропал?
Я исследовал уже включенные. Но это мой вопрос:
[4] pry(main)> @company = Company.includes(clients: [:properties]).find(1)
Company Load (0.2ms) SELECT "companies".* FROM "companies" WHERE "companies"."id" = ? LIMIT 1 [["id", 1]]
Client Load (3.5ms) SELECT "clients".* FROM "clients" WHERE "clients"."company_id" IN (1)
Property Load (5.9ms) SELECT "properties".* FROM "properties" WHERE "properties"."client_id" IN (2, 12)
=> #<Company id: 1, name: "coolDEVOPS2", created_at: "2014-10-31 11:05:05", updated_at: "2014-11-25 09:27:38">
[5] pry(main)>
Я не получаю свойства обратно?
решаемые: Я это глупо там ЭСО/подглядывать печатает только первую запись :)
@ company.properties работает :)
Я был изучение включает в себя. Но даже с помощью:: клиентов я получаю только данные компании, а не свойства. – gtheys
Также использовал .select и, похоже, не получил результата ... Возможно, я сделал это неправильно. – gtheys
Вам не нужно использовать has_many для активной загрузки. –