Обновлен вопрос, поскольку оригинал был более упрощенным, спасибо Аарону Маклеоду, также известному как AGMCLEOD, за помощь в выделении этого
Моя проблема в том, что я не могу заставить его работать, а заставляю работать так, как я хочу.
Проблема
Представьте себе 3 модели, компанию, филиал и контакт, они связаны друг с другом через модель CompanyContacts или справочную таблицу.
Таблица company_contacts выглядит следующим образом:
+------------+-----------+------------+
| company_id | branch_id | contact_id |
+------------+-----------+------------+
и мои идеальные утверждения для связи контакта с филиалом и компанией должны быть:
update company_contacts set contact_id = x where branch_id = y AND company_id = z
Итак, вопрос: как это возможно при использовании ActiveRecord? Вы создаете собственные методы, чтобы установить его за один раз?
Что у меня есть в моих моделях
КомпанияКонтакт Модель
belongs_to :company, :class_name => "Company", :foreign_key => :company_id
belongs_to :branch, :class_name => "Branch", :foreign_key => :branch_id
belongs_to :contact, :class_name => "Contact", :foreign_key => :contact_id
Фирменная модель
has_many :company_contacts
has_many :branches, :through => :company_contacts, :source => :branches
has_many :contacts, :through => :company_contacts, :source => :contacts
Филиал Модель
has_many :company_contacts
has_many :companies, :through => :company_contacts, :source => :companies
has_many :contacts, :through => :company_contacts, :source => :contacts
Я бы хотел сделать следующее, но это невозможно
has_one :company, :through => :company_contacts, :source => :company
Конечно, я мог бы смоделировать это
def branch
Branch.companies.first
end
Модель контакта
has_many :company_contacts
has_many :branches, :through => :company_contacts, :source => :branches
has_many :companies, :through => :company_contacts, :source => :companies
Опять же, в идеале, я бы хотел иметь филиал has_one и компанию has_one
Мое текущее решение при создании контакта и << к ветви приводит к созданию двух строк </p>
+------------+-----------+------------+
| company_id | branch_id | contact_id |
+------------+-----------+------------+
| 1 | 1 | nil |
+------------+-----------+------------+
| nil | 1 | 1 |
+------------+-----------+------------+
Когда, на самом деле, я бы хотел добиться:
+------------+-----------+------------+
| company_id | branch_id | contact_id |
+------------+-----------+------------+
| 1 | 1 | 1 |
+------------+-----------+------------+
Единственный способ сделать это - создать собственный метод
Я буду продолжать пытаться решить мою проблему и опубликовать свои выводы
С нетерпением ждем ваших ответов
Заранее спасибо.