Рельсы "Иногда есть один" - PullRequest
1 голос
/ 13 марта 2012

Вероятно, это вопрос новичка, но я не могу придумать хорошего решения.У меня есть таблица company, которая has_many users through groups, которая также может быть администратором компании (что позволяет им редактировать компанию, но только по одной компании на пользователя).

Какой лучший способ настроить это в Rails?

Я не могу добавить поле admin в таблицу пользователей, потому что оно не будет определять, какую компанию он / она администрирует.Но если я сделаю поле company_id, как будут выглядеть эти отношения в Rails (поскольку это своего рода somtimes_has_one отношения!).Я мог бы оставить это без отношений, но это не кажется правильным ...

Заранее спасибо за любую помощь!

1 Ответ

1 голос
/ 13 марта 2012

Насколько я понимаю, у вас есть пользователь, который может принадлежать компании, и если это так, он может фактически управлять им.

Вы можете настроить Group, чтобы иметь, например, company_id, user_id и поле admin (таким образом, вы узнаете, какие пользователи принадлежат какой компании, и если они также управляют этой компанией)

Чтобы пользователь принадлежал только одной компании, вы можете добавить проверку уникальности в двух столбцах (company_id и user_id)

Вы можете получить администраторов одной компании, выполнив

class Company < ActiveRecord::Base
  has_many :groups
  has_many :users, through: :groups
  has_many :administrators, through: :groups, source: :user, conditions: ["groups.admin = ?", true]
end

и звоните company.administrators или company.users для всех пользователей

Вы также можете сделать что-то вроде

class User < ActiveRecord::Base
  has_one :group
  has_one :company, through: :group
  has_one :administered_company, through: :group, source: :company, conditions: ["groups.admin = ?", true]
end

, чтобы вы могли звонить user.company или user.administered_company

и так далее ...

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