#ruby-on-rails #associations #eager-loading #has-many-through
#ruby-on-rails #ассоциации #нетерпеливая загрузка #имеет много сквозных
Вопрос:
У меня возникли проблемы с поиском способа связать класс A с E. Вот подразумеваемый класс :
A имеет много B
B принадлежит A
B принадлежит C
A имеет много C через B
C имеет много D
D принадлежит C
D принадлежит E имя_класса C
C имеет множество E через D
Хорошо, я знаю, что это сбивает с толку, поэтому я создал схему и надеюсь, что она более понятна…
Мой вопрос в том, как я могу связать класс A с классом E (который на самом деле является классом C с определенной ролью). Как я могу использовать a.es (es => множественное число от E : s)?
Я попробовал A has_many E через C (на мой взгляд, это было хорошее решение, потому что A has_many C (через B) и C has_many E (через D)), но это вызвало ошибку :
ActiveRecord::HasManyThroughSourceAssociationMacroError: недопустимый макрос отражения источника :has_many :through для has_many : es, :through => :cs. Используйте :source, чтобы указать отражение источника
Я пишу на rails версии V2.3.9
Если у вас есть какие-либо идеи, пожалуйста, скажите мне. Заранее благодарю вас.
Ответ №1:
Хотя существуют некоторые плагины, которые расширяют :through
функциональность взаимосвязи, обычно невозможно использовать ActiveRecord для одновременной навигации по нескольким слоям. Обычно предел равен единице :through
, не более.
Комментарии:
1. но даже если я не могу сделать напрямую a.es могу ли я хотя бы сделать a.cs.es (cs => множественное число C, es => множественное число E), а затем я добавляю метод ‘es’ в A, который позволяет выполнять a.es . Не могли бы вы дать мне ссылку на один из этих плагинов, пожалуйста?