Ruby on rails 当你想要STI但你知道你不应该';T
我希望了解Rails应用程序的最佳关系模型是什么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
听起来好像单表继承在某种程度上是“工作”的,但当我考虑子模型在它们的“模式”和字段方面的变化时,实际上不是这样。
在这种情况下,我会有很多不同类型的评估
,我希望能够灵活地进行评估。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在我看来,您可能正在构建有点像树结构。