存储资源的两个子记录-ActiveRecord |滑轨

时间:2018-07-20 05:23:07

标签: ruby-on-rails activerecord

我正在研究具有TeacherStudentEmergencyContact模型的Rails 5.2项目。我想为每个EmergencyContactTeacher记录存储两个Student记录。鉴于TeacherStudent模型都将对EmergencyContact记录共享相同的要求,尽管使两个模型共享相同的EmergencyContact效率最高桌子。

这是最好的方法吗?使用ActiveRecord进行设置的最佳方法是什么?

下面的ERD显示了概念:

enter image description here 任何帮助将不胜感激。

谢谢

1 个答案:

答案 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

让我知道这是否有帮助。