我正在研究具有Teacher
,Student
和EmergencyContact
模型的Rails 5.2项目。我想为每个EmergencyContact
和Teacher
记录存储两个Student
记录。鉴于Teacher
和Student
模型都将对EmergencyContact
记录共享相同的要求,尽管使两个模型共享相同的EmergencyContact
效率最高桌子。
这是最好的方法吗?使用ActiveRecord进行设置的最佳方法是什么?
下面的ERD显示了概念:
谢谢
答案 0 :(得分:2)
通常,对于这种类型的要求,它使用 ActiveRecord 中的多态关联。您可以找到有关here的更多信息。
此设置类似于以下内容:
在型号中
# In app/models/emergency_contact.rb
class EmergencyContact < ApplicationRecord
belongs_to :emergency_contactable, polymorphic :true
end
# In app/models/teacher.rb
class Teacher < ApplicationRecord
has_many :emergency_contacts, as: :emergency_contactable
end
# In app/models/student.rb
class Student < ApplicationRecord
has_many :emergency_contacts, as: :emergency_contactable
end
需要进行架构迁移(紧急联系人表中的新字段)
class AddEmergyContactable < ActiveRecord::Migration[5.0]
def change
add_reference :emergency_contacts, :emergency_contactable, polymorphic: true, index: true
end
end
让我知道这是否有帮助。