首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >混淆ActiveRecord关系- Rails

混淆ActiveRecord关系- Rails
EN

Stack Overflow用户
提问于 2013-08-17 18:15:48
回答 2查看 102关注 0票数 0

我正试图为一名医生和他们的培训项目/专业设计关系。例子如下:

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

它似乎可以设置为一个has_many :通过.然而,当我试图将它概念化时,这似乎是不有效或不正确的。我有另一个基本上不相关的模型,它与专业(但不是程序)联系在一起,这就是为什么我不把项目和专业结合起来的原因。我应该能够访问User.programs.all和Program.users.all:

模型用户:

has_many程序

has_many专业,通过=>:程序

示范方案:

belongs_to :用户

belongs_to :特产

示范专业:

has_many :用户,:通过=>:程序

has_many :程序

EN

回答 2

Stack Overflow用户

发布于 2013-08-17 18:42:48

你可以有下面这样的模型。

代码语言:javascript
复制
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

希望能帮上忙。

更新,如果医生只能通过程序拥有专业,那么它可以像这样建模。

代码语言:javascript
复制
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

让所有的专科医生(如神经科)。

代码语言:javascript
复制
@neurology.enrollments.collect { |c| c.doctor }.uniq

代码语言:javascript
复制
 Doctor.includes(:enrollments).where(:enrollments => {:specialty_id => @neurology.id})

要想得到医生的所有特长,你必须这样做。

代码语言:javascript
复制
 @doctor.programs.collect { |p| p.specialty }.uniq
票数 2
EN

Stack Overflow用户

发布于 2013-08-17 18:34:19

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

使其专业和程序是独立的。

似乎你有很好的机会遇到一个病例,医生有一个专业,但没有参加任何有意义的“项目”。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18291923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档