2014-10-29 72 views
0

我是全新的rails,所以这可能是一个微不足道的问题。在阅读教程时,我已阅读关于关系标识符has_many和has_many的教程。我似乎无法理解的是它们之间的差异。举例来说,如果我有3个型号,医生,约会和患者rails has_many vs has_many through?

class Doctor< ActiveRecord::Base 
    has_many :appointments 
    has_many :patients, through: :appointments 
end 

class Appointment < ActiveRecord::Base 
    belongs_to :doctor 
    belongs_to :patient 
end 

class Patient < ActiveRecord::Base 
    has_many :appointments 
    has_many :doctors, through: :appointments 
end 

我不能只是说,医生的has_many:患者和患者的has_many:医生,他们会扯上关系?通过约会来达到这个目的的目的是什么?

感谢

回答

0

你说得对。如果你说医生has_many :patients和病人has_many :doctors,那么他们会有关系。

但是,我认为本教程的内容是多对多关联。

如果医生模型和患者模型被has_many相关的,然后医生专门拥有病人和病人拥有医生。但通常情况可能并非如此。医生可以有很多患者,这些患者不必专属于医生;他们可能有其他医生。

这时候许多一对多协会进来的。在许多到多的关联,一个对象可以有属于它但不排除许多对象。这就像医生模型和患者模型之间的关联。

有两种方法可以创建一个许多一对多协会:

  1. has_and_belongs_to_many
  2. has_many#somethingthrough:#joining表

你的情况,您正在使用第二种方式,加入表assocation

查看这个Railscast关于这两个的详细解释。此外,这this official Rails documentation on associations将有所帮助。

0

使用的唯一原因a“到”表是当你想使用包含在中间表中的一些相关数据,在这种情况下,与医患双方任命的数据。

此外,has_many预计相关belongs_to,反之亦然,所以你必须使用has_and_belongs_to_many在两个模型来表示一个多一对多的关系,并创建相应的连接表去用它。

否则,是的,您可以简单地在其各自的文件中使用has_and_belongs_to_many :patientshas_and_belongs_to_many :doctors

请特别注意Rails Guide中的第2.8节。这可能需要一些通读,但一旦你得到它,这是有道理的,我保证。