Может ли модель принадлежать многим моделям, имеющим одну из первых моделей?

У меня есть две таблицы.userssuperpowers

Я хочу каждый user быть ограниченным одним superpower, Но разные users может иметь то же самое superpower, (у Сэма может быть огонь, у Джона может быть молния, у сары также может быть молния. Но у каждого пользователя может быть только одна сверхдержава)

Я хочу сохранить внешний ключ в пользовательской таблице.

Будет has_one а также belongs_to отношения подойдут для этого?

userhas_onesuperpower,superpowerbelongs_touser

Руководство по рельсам говорит, что has_one устанавливает отношения один на один. Но тонкий нюанс не рассматривается: является ли "принадлежащая" модель (т.е. superpowers) can belong to multiple "has_one-ing" models (i.e.users`), где каждая ассоциация является отношением один к одному (например, у john есть молния, а у sarah также есть молния).

ИЛИ, означает ли это, что и модель "принадлежности", и модель "наличия" должны быть уникальными во всех ассоциациях? (например, если у Джона есть освещение, у Сары не может быть молнии)?

1 ответ

Решение

Глядя на ваше описание (особенно часть о том, что внешний ключ находится в users таблица), отношения должны быть:

Superpower.has_many :users
User.belongs_to :superpower

belongs_to Часть ассоциации всегда в модели с внешним ключом.

Другие вопросы по тегам