Недавно я завершил вторую фазу школьной программы по утюгу. И разве вы не знаете, что между мной и фазой 3 стоял старый большой проект.

Одним из фундаментальных принципов для понимания ActiveRecord (или любого другого инструмента базы данных, если уж на то пошло) является отношение has_many:through. И поскольку мой проект — веб-сайт с обзорами видеоигр для классических стратегий в реальном времени (RTS) — потребует именно таких отношений, я решил рассказать о том, как эта концепция может сбивать с толку таких новичков, как я.

Я знал, что моему сайту нужны три класса. Класс User, класс Game и класс Review. Но поскольку я думал, что у пользователя должна быть игра, я ошибочно полагал, что у пользователя будет много игр и, следовательно, будет много отзывов об этих играх… Я был НЕПРАВ!

Как оказалось, при создании веб-сайта вы должны иначе думать об объектных связях.

Да, технически пользователь должен владеть игрой, прежде чем просматривать ее на веб-сайте. Чего я не понял, так это того, что сами игры также должны быть владельцами каждого отзыва, сделанного пользователем. Таким образом, вместо пользователя, имеющего много игр, и игры, имеющей много пользователей (и, следовательно, пользователя, имеющего много обзоров через игры), и пользователь, и игра имеют много отзывов и ОБЪЕДИНЯЮТСЯ своими конкретными отзывами.

В моем случае таблица отзывов была моим единственным источником правды, концепция, которая в основном означает, что у вас должна быть только одна таблица, содержащая информацию, необходимую для сопоставления с ее родительскими элементами.

Вот визуальное представление трех моих классов и ассоциаций ActiveRecord:

После долгого вечера раздумий, связанных с базой данных, я смог создать и перенести приведенные выше таблицы и тем самым стал на один шаг ближе к полному пониманию объектных отношений и присоединяемых таблиц.

Если вам случится столкнуться с трудностями с отношением has_many:through, просто знайте, что это абсолютно нормально быть запутанным или даже совершенно не знать, как должны быть построены ваши отношения между таблицами, тем более, что все больше и больше переменных добавиться в уравнение.

Если вы ищете дополнительную информацию, зайдите здесь, где вы найдете приятную, приятную информацию о соединениях таблиц.

И на этом я говорю прощай. Удачного кодирования, ребята!