Ruby on rails RubyonRails具有许多多态性

Ruby on rails RubyonRails具有许多多态性,ruby-on-rails,ruby,activerecord,polymorphism,associations,Ruby On Rails,Ruby,Activerecord,Polymorphism,Associations,我有一个模型、一个项目。 每个项目都有许多特点。 这些特征可以是许多不同的东西: 一个相当大的跑道 一流的品质 风味特征 等 如何在RubyonRails中建立这种关系?在一个普通的Ruby应用程序中,我可以只使用duck类型,但这需要存储在数据库中 这就像多态性的反面:true 我希望避免单表继承,因为这些特性虽然将共享duck类型的接口,但具有非常不同的功能。这将导致表中出现大量未使用的字段,这似乎是一种混乱、混乱的做法 StackOverflow上已经有几篇关于这方面的帖子,但其中一篇的情

我有一个模型、一个项目。
每个项目都有许多特点。
这些特征可以是许多不同的东西:
一个相当大的跑道
一流的品质
风味特征

如何在RubyonRails中建立这种关系?在一个普通的Ruby应用程序中,我可以只使用duck类型,但这需要存储在数据库中

这就像多态性的反面:true

我希望避免单表继承,因为这些特性虽然将共享duck类型的接口,但具有非常不同的功能。这将导致表中出现大量未使用的字段,这似乎是一种混乱、混乱的做法


StackOverflow上已经有几篇关于这方面的帖子,但其中一篇的情况与我的不同,而另一篇的解决方案相当狡猾,我想看看是否有更好的解决方案。

你不能跨多态关联进行连接。最好的方法就是像你前面提到的那样,用STI好好学习。尽管您可能会争辩说您将有多个字段为null,但至少rails能够进行合理的连接来帮助您进行查询。

我不明白为什么不使用单表继承来实现这一点?如果你的特征是非常不同的功能,你必须在不同的模型中定义它们,对吗?或者你是在问如何让
@item.traits
使用在不同模型中定义的方法?@Donald这看起来很混乱,因为如果所有trait模型共享一个表,将有很多未使用的字段。如果这是最好的方法,那我就是这么做的,但我认为会有更好的方法。@Donald只是重读你的评论,并想澄清一下:我绝对想要不同型号的。如果可能的话,我只是希望将这些模型放在单独的表中。你想使用不同的模型和不同的表来管理特征,但想使用一种动态关联方法,比如多态性,对吗?我认为您可以添加一个类似于
适配器
的模型,它就像许多类型的特征和项目之间的桥梁一样管理关联。并且,
Adapter
将每个trait的类名保存为字符串,然后您可以使用
Object.const\u get class\u name\u string
使用不同trait的模型。如果这听起来不错,我将写一些示例代码来回答。@Donald谢谢。这听起来不错,但我需要看一些示例代码来真正理解如何实现这一点。