Ruby on rails 当你想要STI但你知道你不应该';T

Ruby on rails 当你想要STI但你知道你不应该';T,ruby-on-rails,ruby,database,postgresql,activerecord,Ruby On Rails,Ruby,Database,Postgresql,Activerecord,我希望了解Rails应用程序的最佳关系模型是什么 听起来好像单表继承在某种程度上是“工作”的,但当我考虑子模型在它们的“模式”和字段方面的变化时,实际上不是这样。 在这种情况下,我会有很多不同类型的评估,我希望能够灵活地进行评估。first.type=CarAppraisal或评估。count=142,其中count将是评估的多个不同子模型类的总和(如房屋评估、分类鉴定) 主模型类型:评估 class Appraisal < Application Record has_one :ca

我希望了解Rails应用程序的最佳关系模型是什么

听起来好像单表继承在某种程度上是“工作”的,但当我考虑子模型在它们的“模式”和字段方面的变化时,实际上不是这样。

在这种情况下,我会有很多不同类型的
评估
,我希望能够灵活地进行
评估。first.type=CarAppraisal
评估。count=142
,其中
count
将是
评估的多个不同子模型类的总和(如房屋评估、分类鉴定)

主模型类型:
评估

class Appraisal < Application Record
  has_one :car_appraisals
  has_one :house_appraisals
  has_one :life_appraisals
  #insert other has_one _appraisals I might add in the future
end
class HouseAppraisal < Application Record
  belongs_to :appraisal
end
class CarAppraisal < Application Record
  belongs_to :appraisal
end

子车型类型:
汽车评估

class Appraisal < Application Record
  has_one :car_appraisals
  has_one :house_appraisals
  has_one :life_appraisals
  #insert other has_one _appraisals I might add in the future
end
class HouseAppraisal < Application Record
  belongs_to :appraisal
end
class CarAppraisal < Application Record
  belongs_to :appraisal
end
class-carapproval<申请记录
属于:评估
结束

我所考虑的

  • 我想到了一些我可以利用的
    方法,通过:xxx
    ,但我真的不知道这是如何工作的
  • 我知道我在家长评估模型中加入了一个,但这并不完全正确,因为这意味着它将包含其中的一个,而事实上它只是其中的一个
  • 让事情复杂化的是,我实际上正在跨ActiveRecord(Postgres)映射
    评估
    模型,以及跨MongoId(MongoDB)映射的子模型(例如
    PetAppraisal
    ),因为它们在模式中有相当大的差异,但我认为从总体ERD来看,这不应该有太大的变化

哪些字段是所有评估类型的通用字段?您能否将这些通用字段作为“评估”提取出来模型和所有其他字段都是不同类型的模型,属于:评估
?谢谢Taryn,这是我认为可能的。我想我会有公共字段,再加上另一个字段作为外键例如:
child\u id
,它会引用子模型。你会怎么做尽管如此,在ActiveRecord对关联的支持、记录的保存等方面,当父模型上没有
有多个
有一个
关联时?我建议根本不要麻烦STI父/子建模…CarApproval可以是一个独立于生命评估的表…有自己的表列…但公共字段都在评估表中。然后使用评估模型中的多态关联来引用其他内容…例如评估
有一个:可评估,:多态=>true
,因此您可以使用评估表查找所有可评估的内容…@nickj在我看来,您可能正在构建有点像树结构。