0

我正在尝试为医生及其培训计划/专业设计关系。下面的例子:

  • 一个项目有一个专业/项目(例如,大学神经病学培训项目专门研究神经病学)
  • 一个医生可以有多个项目,因此有多个专业(例如,史密斯博士是一名参加大学神经病学培训项目的神经科医生,而琼斯博士是一名参加大学神经病学培训项目和大医院儿科项目的神经科医生和儿科医生)

似乎可以将其设置为 has_many :through ... 但是,当我尝试将其概念化时,这似乎并不有效或不正确。我有另一个与专业(但不是程序)相关的很大程度上不相关的模型,这就是为什么我不将程序和专业结合起来。我应该能够访问 User.programs.all 和 Program.users.all :

模型用户:

has_many 程序

has_many 专业,:through => :programs

示范项目:

属于_to:用户

属于_to:专业

模特专长:

has_many :users, :through => :program

has_many :程序

4

2 回答 2

2

你可以有类似下面的模型。

class Doctor
  has_many :specialties, :through => :practices
  has_many : enrollments
  has_many :programs , :through => : enrollments  
end

class Program
  has_many : enrollments
  has_many :doctors, :through => : enrollments
  belongs_to :specialty  
end

class Enrollment
  belongs_to : doctor
  belongs_to :program 
end

class Specialty
  has_many :practices
  has_many :doctors, :through => :practices   
  has_many :programs  
end

class Practice
  belongs_to :doctor
  belongs_to :specialty 
end

希望能帮助到你。

更新 如果医生只能通过程序获得专业知识,则可以这样建模。

class Doctor
  has_many :enrollments
  has_many :programs, :through => :enrollments
end

class Program
  has_many :enrollments
  has_many :doctors, :through => :enrollments
  belongs_to :specialty  
end

class Enrollment
  belongs_to :doctor
  belongs_to :program 
end

class Specialty
  has_many :programs
  has_many :enrollments , :through => :programs
end

获得所有专业的医生,例如神经病学。

@neurology.enrollments.collect { |c| c.doctor }.uniq

或者

 Doctor.includes(:enrollments).where(:enrollments => {:specialty_id => @neurology.id})

要获得医生的所有专业,您必须这样做。

 @doctor.programs.collect { |p| p.specialty }.uniq
于 2013-08-17T18:42:48.473 回答
0

不要通过程序链接到专业。

使专业和程序是独立的。

看起来你很有可能遇到一个医生有专业但没有参加任何有意义的“项目”的案例。

您可以添加从专业到程序的“软”链接:在模型专业中添加“belongs_to :program”,程序可能为 NULL。

于 2013-08-17T18:34:19.687 回答