rails has_many vs has_many through?
我是全新的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:医生,他们会扯上关系?通过约会来达到这个目的的目的是什么?
感谢
你说得对。如果你说医生has_many :patients
和病人has_many :doctors
,那么他们会有关系。
但是,我认为本教程的内容是多对多关联。
如果医生模型和患者模型被has_many
相关的,然后医生专门拥有病人和病人拥有医生。但通常情况可能并非如此。医生可以有很多患者,这些患者不必专属于医生;他们可能有其他医生。
这时候许多一对多协会进来的。在许多到多的关联,一个对象可以有属于它但不排除许多对象。这就像医生模型和患者模型之间的关联。
有两种方法可以创建一个许多一对多协会:
has_and_belongs_to_many
-
has_many
#somethingthrough:
#joining表
你的情况,您正在使用第二种方式,加入表assocation
。
查看这个Railscast关于这两个的详细解释。此外,这this official Rails documentation on associations将有所帮助。
使用的唯一原因a“到”表是当你想使用包含在中间表中的一些相关数据,在这种情况下,与医患双方任命的数据。
此外,has_many
预计相关belongs_to
,反之亦然,所以你必须使用has_and_belongs_to_many
在两个模型来表示一个多一对多的关系,并创建相应的连接表去用它。
否则,是的,您可以简单地在其各自的文件中使用has_and_belongs_to_many :patients
和has_and_belongs_to_many :doctors
。
请特别注意Rails Guide中的第2.8节。这可能需要一些通读,但一旦你得到它,这是有道理的,我保证。