Rails Model Association Путаница - PullRequest
0 голосов
/ 26 ноября 2010

Привет, ребята.У меня есть следующие модели:

  • Категория
  • Событие
  • Блокировка
  • Элемент
  • Сайт
  • Пользователь

Events, по сути, является «элементом журнала».Другими словами, они будут хранить, какое действие было выполнено, что Item, чем User, в каком Category.Естественно, когда я думал об этом, я подумал, что у него «один пользователь», «одна категория», «один элемент» и так далее.Однако это будет означать, что в любой строке User будет внешний ключ для Event, но это не то, что я хочу.Мне нужен внешний ключ в строке Event, поскольку Event просто дает информацию о том, что User, что Category и т. Д.

Так что я понимаю, что вместо этого я должен сказатьчто Event "принадлежит пользователю", "принадлежит категории" и т. д. и что у каждого из них "есть много событий" взамен, верно?Я просто уверен, потому что это не читается логически, как большинство других ассоциаций.Мне не нужно / я не хочу иметь доступ к событию с другой стороны (например, user.event), потому что это не имеет особого смысла.Так что, если я сделаю это, я бы просто добавил belongs_to вызов, а не has_one на другой стороне?

Возможно, я разработал это неправильно.

Я в конечном итоге хочу иметь возможностьдля рендеринга «страницы журнала», заполненной строками, описывается строка со следующим описанием:

event.user event.action event.item event.category

Ответы [ 2 ]

1 голос
/ 26 ноября 2010

Да, здесь вы хотите использовать ассоциацию has_many & own_to.В контексте Activerecord, это has_many, который определяет необходимость в own_to.«Если модель (а) имеет_много другой модели (б), то связанная с ней модель (б) принадлежит_ первой модели (а)».

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

Если, с другой стороны, у пользователя должно было быть только одно событие, связанное с ним,тогда эти модели будут иметь ассоциацию has_one.

1 голос
/ 26 ноября 2010

Мне не нужно / я хочу иметь доступ событие с другой стороны (т.е. user.event), потому что это не сделает много смысла. Так что, если я сделаю это, я бы просто добавьте вызов own_to, а не has_one на другой стороне?

Добавьте их обоих (belongs_to и has_many). Конечно, user.event не имеет смысла, но user.events имеет смысл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...