在我的应用程序中,我有三个感兴趣的模型。第一个是 Patient 模型,它有_many Record 模型。类似地,Record 模型 has_many 诊断模型。最初,我让 Patient 模型通过以下方式访问诊断:
:has_many :diagnoses, :through => :records
但是我遇到的问题是我还希望 Patient 模型能够创建一个独立于 Record 模型的诊断对象。例如,在入院期间,患者可能被诊断出患有新疾病。然而,她也可能有过某种疾病的历史(先前的诊断),所以我想跟踪它而不必求助于创建新模型。
我尝试使用这里描述的多态关联,这样我的模型看起来像:
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
我遇到的问题是,虽然我可以通过 Record 对象成功创建 Diagnosis 对象,但当我调用p.diagnoses
(p
Patient 对象在哪里)时,它并没有像我期望的那样让我访问所有 Diagnosis 对象。
重申一下,我想要的是能够通过 Record 模型或通过 Patient 模型创建一个 Diagnosis 对象,但能够让 Patient 模型访问通过其自身或通过 Record 模型创建的所有 Diagnosis 对象(这应该是可能的,因为 Record 模型属于 Patient 模型)。
我很确定这是我并没有真正理解多态关联是如何工作的,而且我也可能完全滥用了多态关联。所以我感谢所有的帮助。谢谢!