Объединенный стол с необязательным отношением - PullRequest
0 голосов
/ 24 октября 2018

У меня есть три модели:

  • Компания;
  • Инвестор;
  • Брокер.

в реальном мире каждый инвестор можетинвестировать во многие компании, но в некоторые он / она может инвестировать с помощью брокера.Я сделал это через объединенную таблицу.

def change
  create_join_table :companies, :investors do |t|
    t.references :broker, index: true, optional: true
  end
end

class Company < ApplicationRecord
  has_and_belongs_to_many :investors
end

class Investor < ApplicationRecord
  has_and_belongs_to_many :companies
end

class Broker < < ApplicationRecord
  has_many :companies
end

Как мне настроить мои модели / миграции, чтобы иметь следующую информацию:

Company.first.investors.first.broker

брокер не принадлежит инвестору, в каждой компании / инвестореПара может быть разным брокером.

1 Ответ

0 голосов
/ 24 октября 2018

Используйте has_many через ассоциации и добавьте посредника в модель соединения.После добавления правильных миграций ваши модели будут выглядеть следующим образом:

class Company < ApplicationRecord
  has_many :company_investors
  has_many :investors, through: :company_investors
end

class Investor < ApplicationRecord
  has_many :company_investors
  has_many :companies, through: :company_investors
end

class Broker < ApplicationRecord
  has_many :company_investors
  has_many :companies, through: :company_investors
end

class CompanyInvestor < ApplicationRecord
  belongs_to :broker
  belongs_to :investor
  belongs_to :company
end

С этими моделями вы можете добавлять Investor к Company ассоциациям с Broker или без них, а также различать их.Я также рекомендую назвать модель соединения (которую в своем коде я назвал CompanyInvestor) более значимым именем, например Investment

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