Я создаю приложение, которое занимается спортивными командами. В настоящее время у меня две модели. Модель User.rb и модель Teams.rb. Внутри пользователей приложения я хотел бы иметь капитанов команд и товарищей по команде. Я хотел бы дать капитану притязания на создание команды, когда они подпишут. Я хотел бы, чтобы капитан принадлежал команде, а товарищи по команде принадлежат команде. Я бы хотел, чтобы у команды был только один капитан. Каким будет лучший способ установить это? Должен ли я иметь капитана и псевдонима товарища по команде в модели пользователей? Или было бы лучше сделать модель captains.rb?Лучший способ создать модель и базу данных
ответ
Если капитаны и товарищи по команде имеют разные атрибуты, поэтому я думаю, что лучше отделить модели, но если это не так, почему бы вам не создать таблицу соединений для товарищей по команде между пользователями и командой, а модель команды имеет владельца Я бы. Пример
Схема:
Team (owner_id, .....)
Одноклубники (user_id, team_id, ....)
Это поможет вам установить связь между belongs_to Командные и пользовательские модели в качестве Капитана, используя столбец owner_id в командной модели, а остальные члены могут быть сделаны by_many teammates через Teammates Model или даже использовать has_and_belongs_to_many ассоциацию. Таким образом, вы сможете позволить одному пользователю иметь одну команду или даже товарища по команде в других командах.
Еще одна идея, позволяющая всем членам внутри таблицы join с дополнительным столбцом определить свою роль в команде, что даст вам больше контроля, если вы собираетесь добавить больше ролей в будущем и определить свои валидации и совки для этого.
Ok, первый позволяет раскладывать предположение отношения, так как есть некоторые, которые являются неточными из описаний:
Пользователя может:
- В многих капитанами
- быть на многих командах
команда может:
- Принадлежит к одному капитану
- Есть много пользователей, как товарищи по команде
От этого я думаю, вам нужно 3 модели:
- пользователя
- Команда
- Одноклубники, который действует как has_many_through JOIN таблица между пользователями и командами
Модель членов команды, безусловно, есть:
- user_id
- team_id
- Возможная роль/тип поля
И это оставляет точку, где вы должны принять решение о приложении на основе как вы будете использовать данные. Поскольку у команды будет только один капитан, вы можете оставить поле ролей в модели teammate и просто добавить user_id или captain_id в фактическую модель Team. Это означало бы, что капитан всегда считается особым и отличается от других товарищей по команде. Тем не менее, я предполагаю, что вы могли бы пропустить всех членов команды, включая капитана. Вот почему вы, вероятно, должны просто сделать капитана особой ролью в модели teammate и добавить валидацию, чтобы убедиться, что есть только один капитан. Тогда вам не нужно делать особую манипуляцию для капитана всякий раз, когда вы перебираете всю команду.
Предполагая, что вы идете с полем роли тогда ваши окончательные модели будут иметь следующие соотношения:
Teammate
- belongs_to: команда
- belongs_to: пользователь
Пользователь
- has_many: товарищи по команде
- HAS_MANY: команды, через:: товарищи по команде
Команда
- has_many: товарищи по команде
- HAS_MANY: пользователи, с помощью:: товарищи по команде
- has_one: team_captain, - > {где роль: 'капитан'}, имя_компьютера: 'Teammate'
Вы могли бы также полюбить этот последний, разработав has_many, чтобы добраться до капитана, а не капитана team_mate. Это сообщение имеет некоторые интересные подробности о передовых has_one:
http://www.rojotek.com/blog/2014/05/16/cool-stuff-you-can-do-with-rails-has_one/
Я хотел бы сделать следующим образом:
В начале приложение позволяет зарегистрироваться в качестве «пользователя владельца ака команды» или как «товарищ по команде»
- Пользователи.rb - могут создавать команды и приглашать других товарищей по команде. Имеет административные права.
- Teams.rb - принадлежит Пользователю и имеет много товарищей по команде.
- Teammates.rb - принадлежит к командам.
- Все назначенные товарищи по команде могут обладать надписью «капитан» с надписью «admin» с булевым значением. Это может спасти вас от создания еще одной таблицы db. Если «капитан» не «истинно», статус товарища по команде «простой игрок». В противном случае это «капитан».
Другой способ - позволить пользователям создавать команды и товарища по команде.
- Пользователь has_many Команды и товарища по команде.
- Teammate принадлежит_to Пользователю и принадлежит_ команде.
- Team принадлежит_to Пользователь и has_many Составы матчей.
- 1. лучший способ добавить категории в базу данных
- 2. лучший способ создать модель дизайна домена?
- 3. Angularjs лучший способ иметь базу данных
- 4. Лучший способ создать базу данных электронной почты для нескольких пользователей
- 5. Какой лучший способ создать базу данных с использованием титана
- 6. Лучший способ создать базу данных для онлайн-оценки
- 7. Лучший способ создать базу данных для сайта Image Hosting?
- 8. лучший способ экспортировать базу данных MySQL в базу данных SqlServer
- 9. Какой лучший способ структурировать мою базу данных?
- 10. Лучший способ вставки записи в базу данных
- 11. Лучший способ для кэширования Модель
- 12. Создать модель из xml и импортировать в базу данных
- 13. лучший способ удалить и повторно вставить данные в базу данных
- 14. Лучший способ сохранения и извлечения изображений в базу данных
- 15. Более быстрый способ скопировать базу данных postgresql (или лучший способ)
- 16. Лучший способ создать шлюз
- 17. Что такое лучший способ перевести текст в базу данных
- 18. Laravel готовит базу данных перед тестом на модель со многими зависимостями, есть ли лучший способ?
- 19. Лучший способ создать групповой чат
- 20. Лучший способ создать файл данных в Android
- 21. Лучший способ очистки данных перед записью в базу данных
- 22. Лучший способ создать график из данных
- 23. Лучший способ кодирования данных
- 24. лучший способ создать общую модель, которая может быть ленивой.
- 25. Есть ли лучший способ создать эту модель? (Django)
- 26. Лучший способ ввода сложной таблицы в базу данных sqlite
- 27. Лучший способ обновить текущую базу данных при сохранении данных?
- 28. Лучший способ создать модель для магазина для массива?
- 29. Лучший способ создать метод «ссылка» в Rails (модель или помощник)?
- 30. Лучший способ создать табло
У капитанов и товарищей по команде есть разные атрибуты? –
** Просто предупреждение: соглашение Rails заключается в использовании сингулярных существительных для моделей. 'rails g model Users 'дал бы вам: ** [WARNING] Название модели« Пользователи »было распознано как множественное число, вместо этого использовалось единственное« Пользователь ». Переопределите с помощью -force-множественное число или настройте правила пользовательского перегиба для этого существительного перед запуском генератора. –