Я пишу базовое приложение CRM для изучения Ruby on Rails 4.2, и у меня есть нечетная пара ассоциаций (или, может быть, не так странно). Если бы это был прямой SQL и другая платформа, это было бы просто, но я не уверен, правильно ли я делаю это в ROR.Является ли эта связь Rails между компанией и сотрудником действительной?
Бизнес-требование состоит в том, что каждая компания имеет одного или нескольких пользователей. Достаточно просто. (Соответствующие части приведенной ниже модели.)
user.rb
belongs_to :company
company.rb
has_many :users
Дополнительным требованием является то, что каждая компания может иметь одного основного пользователя. Мне нужно иметь возможность ссылаться на информацию пользователя (имя, адрес электронной почты и т. Д.) В индексе компаний и показать представление. Здесь я немного неопределен. Если модели выглядеть следующим образом (это не имеет смысла для меня, но я не могу думать иначе) ?:
user.rb
belongs_to :company
company.rb
has_many :users
has_one :user
Вот сокращенная схема. Пользователь user_id в компаниях является FK для хранения «первичного контакта»:
create_table "companies", force: :cascade do |t|
t.string "companyname"
t.integer "user_id"
end
create_table "users", force: :cascade do |t|
t.string "username"
t.string "email"
t.string "phone"
t.integer "company_id"
end
Благодарим за помощь.
Спасибо Vijay, я собираюсь попробовать оба подхода в ближайшее время. Чтобы быть как можно более простым, вы бы пошли с первым или вторым вариантом? Чтобы быть ясным: компания ** не ** должна иметь первичного контакта/пользователя, но у них может быть до одного. –
Я пошел с первым вариантом, который вы предложили. Создал и выполнил миграцию в моем первоначальном размещении **, плюс ** 'primary_user_id' в таблице' companies'. Я заполнил несколько пользователей и несколько компаний, затем для тестовой компании «А», я добавил внешний ключ пользователя 1. В консоли rails 'user.find (1) .company' возвращает правильный объект, но' компания .find (1).user' возвращает эту ошибку: NoMethodError: undefined method \ 'User \' for # Вы имели в виду? –
Первое предложение отлично поработало, спасибо. Решение моей последующей деятельности было следующим: после того, как я получил правильные данные в базе данных, я мог бы использовать 'Company.find (1) .primary_user' –