Ruby on rails 3 RubyonRails-一对一/多?具有扭曲的双向多态性

Ruby on rails 3 RubyonRails-一对一/多?具有扭曲的双向多态性,ruby-on-rails-3,one-to-many,polymorphic-associations,one-to-one,Ruby On Rails 3,One To Many,Polymorphic Associations,One To One,我正在做一个脱欧前疾病登记,我需要一些新功能的帮助 在数据库中,有几个表负责患者的不同就诊(称为V1、V2、V3)。每次就诊可采集不同的样本(粪便、拭子、血液等)。每个样本都有一个特定的样本ID(字符串),给定一个样本ID,我需要搜索样本表(双向关系),找出样本来自哪个就诊,样本来自哪个患者 现在,我有两个想法 为了跟踪样本,每个就诊表都有一对一的特定样本参考(即粪便样本、拭子样本),这是样本表中的唯一id。但为了实现双向关系(搜索期间访问的样本),我需要从样本表中创建多态关系。这种方法要求我在

我正在做一个脱欧前疾病登记,我需要一些新功能的帮助

在数据库中,有几个表负责患者的不同就诊(称为V1、V2、V3)。每次就诊可采集不同的样本(粪便、拭子、血液等)。每个样本都有一个特定的样本ID(字符串),给定一个样本ID,我需要搜索样本表(双向关系),找出样本来自哪个就诊,样本来自哪个患者

现在,我有两个想法

  • 为了跟踪样本,每个就诊表都有一对一的特定样本参考(即粪便样本、拭子样本),这是样本表中的唯一id。但为了实现双向关系(搜索期间访问的样本),我需要从样本表中创建多态关系。这种方法要求我在两边都存储id,这通常感觉是个坏主意

  • send方法只是在sample表上建立多态关系,并将sample类型作为额外的列添加到表中。但是,这需要我在视图页面上创建/更新样本类型时硬编码

  • 我只是想知道有没有人对这些有什么建议?还是有更好的解决方案?最好使用示例代码,因为我对这方面还不太熟悉


    谢谢

    在我看来,样本应该属于访问(多态性允许不同的访问类型/表)。无需自引用或硬编码。您还可以制作一个抽象的
    Visit
    类来保持干燥:

    class Visit < ActiveRecord::Base
      self.abstract_class = true
      has_one :sample, as: :visit
      belongs_to :patient
    end
    
    class VisitOne < Visit
    end
    
    class VisitTwo < Visit
    end
    
    class Sample < ActiveRecord::Base
      belongs_to :visit, polymorphic: true
      delegate :patient, to: :visit
    end
    
    class Patient < ActiveRecord::Base
      has_many :visit_ones
      has_many :visit_twos
    end
    
    课堂访问

    现在,您可以根据
    样本
    查找
    就诊
    患者
    ,以及根据
    就诊
    查找
    样本
    患者
    。您还可以跟踪每个
    患者的各种
    就诊类型。示例“类型”(wince,尝试使用另一个更准确的术语)可以简单地存储为
    Sample
    上的文本字段-如果您不想在代码中将这些类型硬编码为枚举,您可以制作一个表来保存示例类型,并使
    Sample
    属于
    SampleType

    谢谢,我会给它一个快照我只是想知道如何在查看页面中创建/更新它?我如何定义样本类型?你能给我一些示例代码吗?谢谢。顺便说一句,我用的是simple_form@hook38问建模/架构问题是一回事——问原型应用程序是另一回事;)。请尽最大努力,如果您有具体问题,请回复。