gpt4 book ai didi

ruby-on-rails - 如何通过连接表填充 has_many 中的字段

转载 作者:行者123 更新时间:2023-12-03 20:45:42 26 4
gpt4 key购买 nike

我有一个关于事件记录关联的问题,引用rails文档的这一部分:

http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association

如果我们有三个模型:

class Physician < ActiveRecord::Base
has_many :appointments
has_many :patients, :through => :appointments
end

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

class Patient < ActiveRecord::Base
has_many :appointments
has_many :physicians, :through => :appointments
end

文档说可以通过这种方式通过 api 管理连接模型的集合:
physician.patients = patients

但是,如果约会模型(如链接示例中所示)有一个名为约会日期的字段,并且我想根据医生和患者在特定日期创建一个新约会,该怎么办?
下面的代码将在约会表中创建一条记录,但是如何在第三步中也填充约会日期呢?
physician = Physician.first
patient = Patients.first
physician.patients << patient

这样的东西存在吗?
physician.patients.create( :patient => patient, 'appointment.appointment_time' => appointment_time ) 

最佳答案

老问题,但应该回答 - 尽管您可以直接分配给 physician.patients<<方法,它创建一个没有值的约会,根据业务规则,它可能有效也可能无效。因此,创建关联的更常用方法是在其中之一上建立约会

demento = Physician.find_by_name('Dr. Demento'}
patient = Patient.new { :name => 'Mrs. Holloway' }
patient.appointments << Appointment.new { :physician => demento, :appointment_time => appt_time }

如果您愿意,您当然可以将第 2 行和第 3 行结合起来。

您引用的文档中的行
physician.patients = patients

我认为狭义的用例可能是,如果 Demento 有 7 名患者,但由于不幸的死亡射线实验事件而失去了霍洛威夫人,那么您可以使用 6 名现存患者的更新列表来执行此操作,他们的预约将被保留,Holloway 夫人过去的约会将被自动删除(为了清除这里的任何记录,出于责任保险的原因?只有 Demento 会如此卑鄙)。

关于ruby-on-rails - 如何通过连接表填充 has_many 中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7164865/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com