Ruby on rails 3 Rails 3中模型多态关联的可能误用
在我的应用程序中,我有三个感兴趣的模型。第一个是病人模型,它有许多记录模型。同样,记录模型有许多诊断模型。最初,我让患者模型通过以下方式访问诊断:Ruby on rails 3 Rails 3中模型多态关联的可能误用,ruby-on-rails-3,associations,polymorphic-associations,Ruby On Rails 3,Associations,Polymorphic Associations,在我的应用程序中,我有三个感兴趣的模型。第一个是病人模型,它有许多记录模型。同样,记录模型有许多诊断模型。最初,我让患者模型通过以下方式访问诊断: :has_many :diagnoses, :through => :records 然而,我遇到的问题是,我还希望患者模型能够独立于记录模型创建诊断对象。例如,在入院期间,患者可能被诊断出患有新的疾病。然而,她也可能有病史(先前的诊断),因此我想记录下来,而不必求助于创建新模型 我尝试使用如上所述的多态关联,使我的模型看起来像: class
:has_many :diagnoses, :through => :records
然而,我遇到的问题是,我还希望患者模型能够独立于记录模型创建诊断对象。例如,在入院期间,患者可能被诊断出患有新的疾病。然而,她也可能有病史(先前的诊断),因此我想记录下来,而不必求助于创建新模型
我尝试使用如上所述的多态关联,使我的模型看起来像:
class Patient < ActiveRecord::Base
has_many :records
has_many :diagnoses, :as => :medical_history
# ...
end
class Record < ActiveRecord::Base
belongs_to :patient
has_many :diagnoses, :as => :medical_history
# ...
end
class Diagnosis < ActiveRecord::Base
belongs_to :medical_history, :polymorphic => true
# ...
end
class Patient:病史
# ...
结束
类记录:病史
# ...
结束
类诊断true
# ...
结束
我遇到的问题是,虽然我可以通过Record对象成功创建诊断对象,但当我调用p.diagnostics
(其中p
是一个患者对象)时,它并不能像我期望的那样让我访问所有诊断对象
重申一下,我希望能够通过记录模型或患者模型创建诊断对象,但能够让患者模型访问通过自身或记录模型创建的所有诊断对象(这应该是可能的,因为记录模型属于患者模型)
我很确定这是我没有真正理解多态关联是如何工作的,我也可能完全误用多态关联。所以我感谢所有的帮助。谢谢 我认为您使用多态性是合适的 通过记录创建的诊断(在本上下文中是一个令人困惑的术语,因为它可能意味着患者记录或数据库记录)不会自动添加到患者。您需要做以下两件事之一:
为了更好地了解发生了什么,请查看为这3个表生成的(假设为SQL)模式。在控制台中,实例化一名患者,调用p.diagnostics和p.records.diagnostics,查看生成的SQL的日志。谢谢pduey,我使用了类似于您的第二个选项的方法实现了这一点-很高兴知道我在使用多态关联方面没有完全偏离目标(尽管如果有人不同意,我很高兴听到原因)。
def diagnoses_all
// you could memoize this if so inclined
(diagnoses + records.collect{|r| r.diagnoses}.flatten).uniq
end