我有三种型号:
在现实世界中,每个投资者都可以投资许多公司,但是在某些人中,可以在经纪人的协助下进行投资。 我是通过联合餐桌做到的。
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
经纪人不属于投资者,在每个公司/投资者对中可以是不同的经纪人。
答案 0 :(得分:1)
使用has_many through associations并将代理添加到联接模型上。添加正确的迁移后,您的模型将如下所示:
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
的{{1}}关联中,并加以区分。我还建议为连接模型(在我的代码中命名为CompanyInvestor
)命名一个更重要的名称,例如Investment