Модель отношений ActiveRecord с пользователями и организациями
Я пытаюсь выяснить, каков наилучший логический способ моделирования отношений между моделями. У меня 4 модели:
- пользователь
- Товар
- SlackTeam
- организация
Здесь у пользователя много продуктов, SlackTeam и организаций, а SlackTeam принадлежит пользователю и имеет одну организацию. Организация должна принадлежать Пользователю и SlackTeam. Я логически правильно здесь?
Рабочий процесс следующий:
- Пользователи могут войти в систему с SlackTeam (который автоматически создает организацию)
- другие пользователи из той же команды Slack будут добавлены в ту же организацию, как только они свяжут свою учетную запись со Slack
- если пользователи подключены ко многим командам SlackTeams (и организациям), они могут фильтровать, чтобы видеть продукты всех организаций, частью которых они являются, или только одной.
Я что-то пропустил?
1 ответ
class User
has_many :users_ogranizations
has_many :organizations, through: :users_organizations
has_many :products, through: :organizations
end
class Product
belongs_to :organization
end
class Organization
has_many :users_ogranizations
has_many :users, through: :users_organizations
has_many :products
end
class UsersOrganization
belongs_to :user
belongs_to :organization
end
# i'd rather use slack profile than team, because Organization and Team
# already connotes the same thing.
class SlackProfile
end
Вы можете обрабатывать логин вашего пользователя так, как вам нравится, хотя я бы предпочел услугу аутентификации. Все продукты, принадлежащие организации, теперь доступны для пользователя, затем вы можете отфильтровать продукты с помощью:
current_user.products.where(organization: Organization.last)