Ruby on rails 在父类不使用';我们没有自己的控制器,它只是一个模型,与其他模型有关系。钢轨STI

Ruby on rails 在父类不使用';我们没有自己的控制器,它只是一个模型,与其他模型有关系。钢轨STI,ruby-on-rails,ruby,inheritance,single-table-inheritance,Ruby On Rails,Ruby,Inheritance,Single Table Inheritance,我有下面的场景 class XYZ < ActiveRecord::Base has_many :abcs end class ABC < ActiveRecord::Base belongs_to :xyz end class A < ABC end class B < ABC end class C < ABC end classxyz

我有下面的场景

class XYZ < ActiveRecord::Base
has_many :abcs
end

class ABC < ActiveRecord::Base
belongs_to :xyz
end

class A < ABC
end

class B < ABC
end

class C < ABC
end
classxyz
ABC模型没有任何控制器或视图。与ABC相关的数据将从XYZ视图和控制器中插入。用户为ABC设置类型值,可以是a、B或C

根据类型,必须实例化相应的STI子类,并适当保存数据。但是在这里,子类没有得到实例化,数据得到了完美的保存。但是我的做法是错误的,因为我已经将子类的代码写入父STI类,因为子类中没有调用该代码

请给出建议并提供一些解决方案或教程


Thanx。请确保
ABC
模型具有
type
属性,并且在保存这些类的实例时将其正确设置为“a”、“B”或“C”

ABC.find
,然后好友应返回相应类的实例


在创建新对象时,您当然需要控制器中的一些代码来根据某些输入参数对正确的子类调用
new

我无法提取您想要的内容,但可能会接受嵌套的\u属性\u来做您想做的事?我希望这能帮助您更好地理解。考虑一个CMS,它们可能有Page、NeSITEM、BygEnter等。它们可以从一个公共类中派生出来,而这类类又继承了ActuvReCordD。每个模型的表都是相同的(标题、正文、标记、发布位置),但每个模型可能有不同的关联、不同的状态或不同的工作流,因此每个模型在自己的类中都有自定义代码。然而,它们都共享一个共同的表和父类。它还允许我使用父类进行跨类搜索,并使生成的记录数组自动类型转换。我在子类中添加了自定义代码,但无法找到实例化子类以在其中运行代码的方法。通过使用accepts_nested_attributes_for机制,您可以接受父类的属性,但无法隔离子类。这就是我的问题。希望你现在对我的问题有更清楚的了解。:)你是说:
ABC.find(some_id)
,它有
类型
=
X
,返回一个
ABC
的实例,而实际上它应该返回一个
X
的实例?Nope@swand。不是那样的。我确实有一个类型列,其中设置了类型。我只是不知道如何运行子STI类中的自定义代码。请说明如何执行子STI类中存在的那部分代码。@Rohit:什么类型的代码?类定义中的类方法、实例方法或代码?你如何以及从何处调用该代码?您必须提供一些示例。这些是子STI类中存在的实例方法。