繁体   English   中英

表单中的Rails单表继承(STI)

[英]Rails Single Table Inheritance (STI) in a form

我有以下域类:

class Rating < ActiveRecord::Base
  validates :kind_id, presence: true # Kind of rating (Class, Type, ...)
end

等级指定飞行员可以飞行的类型或类型的飞机。 如果飞行员具有班级评级,我们需要知道哪个班级,因此我们将该ID存储在STI表中。

class KlassRating < Rating
  validates :klass_id, presence: true
end

如果飞行员具有类型等级,我们需要知道哪种类型,因此我们将ID存储在STI表中。

class TypeRating < Rating
  validates :type_id, presence: true
end

我遇到的问题是如何从表单中获取用户的输入。 我现在的表格总是实例化Rating ,无论用户是否在下拉列表中选择了类别或类型评级。 因此我的验证从未被评估过。

我怎样才能让Rails实例化正确的派生类?

首先,如果你有不同的状态(klass_id用于KlassRating,type_id用于TypeRating),你真的没有STI。 您应该有一个Pilot类等级表和另一个Pilot类型等级表。 您可能有一个通用评级类,它引用具有多态外键的特定评级类型。 在belongs_to文档中查找多态。

现在对于STI,您没有提到“评级”表中有一个名为“type”的字段。 这是必要的,因此如果您存储KlassRating或TypeRating对象实例,它将被存储,因此当您检索它时,它将由预期的ruby类的对象存储。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM