乍一看,这似乎是一个简单的问题。您甚至可能怀疑它之前已经回答过,但不完全是。我已经在网上进行了大量搜索(包括堆栈溢出),但一直找不到答案。
这是我能找到的最接近的东西:一起使用 has_one 和 belongs_to但是它并不能完全回答我的问题。
我正在使用 Rails 4 和 MySQL
数据库结构如下:
合作伙伴表
id
name
primary_contact_id
联系人表
id
partner_id
first_name
last_name
很直截了当,对吧?不言自明。
class Partner < ActiveRecord::Base
has_one :primary_contact, :class_name => "Partners::Contact", :primary_key => 'primary_contact_id'
has_many :contacts, :class_name => "Partners::Contact"
accepts_nested_attributes_for :primary_contact
validates_presence_of :primary_contact
end
class Partners::Contact < ActiveRecord::Base
belongs_to :partner
end
如您所见,在创建合作伙伴时,需要一个主要联系人(表格等都已正确设置)
我遇到的唯一问题是,当 primary_contact 与合作伙伴一起创建时,ActiveRecord 不明白它需要将正在创建的联系人上的 partner_id 分配给正在创建的 partner_id ......
这里的最佳实践?我不想在联系人表中创建一个列来指示(布尔或其他)该联系人是否是主要联系人。这不是正确的数据库规范化(不管“rails 约定”吹捧什么)。
感谢您的帮助和想法!