2014-05-13 5 views
0

У меня есть две таблицы. users superpowersМожет ли модель принадлежать многим моделям, которые имеют первую модель?

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

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

Будет ли has_one и belongs_to отношениями подходящими для этого?

userhas_onesuperpower. superpowerbelongs_touser

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

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

ответ

3

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

Superpower.has_many :users 
User.belongs_to :superpower 

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

+0

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

+0

На всякий случай я не использую правильную формулировку, когда я говорю, что внешний ключ находится в таблице пользователей, я имею в виду, что таблица users имеет столбец, содержащий идентификатор сверхдержавы. – ahnbizcad

+1

@gwho, поэтому я понял это правильно. То, что я не понимаю, - это ваше утверждение о увеличении числа столбцов в таблице супердержав. Не могли бы вы объяснить, что вы имеете в виду? –

 Смежные вопросы

  • Нет связанных вопросов^_^