Ruby on rails 如何在ActiveRecord中拥有异构集合?
我对Rails有些陌生,来自Java,所以我可能在这里完全不熟悉,但我想做以下几点: 我有一个类a,它有一个其他对象的集合。该集合可以包含B、C和/或D对象。重要的是Ruby on rails 如何在ActiveRecord中拥有异构集合?,ruby-on-rails,ruby,activerecord,sti,Ruby On Rails,Ruby,Activerecord,Sti,我对Rails有些陌生,来自Java,所以我可能在这里完全不熟悉,但我想做以下几点: 我有一个类a,它有一个其他对象的集合。该集合可以包含B、C和/或D对象。重要的是 B实际上是一系列类的父类(可能是 通过STI和JSONB数据存储实现(用于差异) C和D由一个或多个B组成,但仍将响应 与B相同的方法(即B、C和D都有duck类型的方法) 从A的一个实例中,我希望能够调用,比如说,@A.collection[2]。dou this并调用适当的dou this 考虑到这一点,我在网上查看示例,最接
考虑到这一点,我在网上查看示例,最接近我所看到的是经典示例:带有帖子、视频等的多态示例,共享单个评论类。然而,这似乎与我想要的正好相反(多对一而不是一对多)。我是在向后看还是怎么看?或者我可以做一些外键的事情,欺骗ActiveRecord进行多任务继承吗?我已经浏览了有关MTI的Enterprise Rails一章,但鉴于这种情况,我希望找到一种更简单/更合适的方法。在这种情况下,您可以利用MTI并使用source来执行方法#为此,您确实希望查看source和source类型方法。我严格地说是通过活动记录
has_many :related_tickers
has_many :catalysts, through: :related_tickers, source: :companiable, source_type: "Catalyst"
has_many :strategic_initiatives, through: :related_tickers, source: :companiable, source_type: "StrategicInitiative"
has_many :projects, through: :related_tickers, source: :companiable, source_type: "Project"
现在,您可以通过相关的代码器加载内容,并通过该模型调用#do#u this方法。在ruby中,若您在每个类中实现了相同的方法,那个么应该按照duck类型执行,这表明一个方法是否可以通过将要运行的对象进行响应。您还可以使用eval和send方法来减轻编程站点上的负载。希望这有帮助,但如果没有,请给我具体的问题,这样我可以产生更好的解决方案 在这种情况下,您可以利用MTI并使用源代码执行方法#为此,您确实希望查看源代码和源类型方法。我严格地说是通过活动记录
has_many :related_tickers
has_many :catalysts, through: :related_tickers, source: :companiable, source_type: "Catalyst"
has_many :strategic_initiatives, through: :related_tickers, source: :companiable, source_type: "StrategicInitiative"
has_many :projects, through: :related_tickers, source: :companiable, source_type: "Project"
现在,您可以通过相关的代码器加载内容,并通过该模型调用#do#u this方法。在ruby中,若您在每个类中实现了相同的方法,那个么应该按照duck类型执行,这表明一个方法是否可以通过将要运行的对象进行响应。您还可以使用eval和send方法来减轻编程站点上的负载。希望这有帮助,但如果没有,请给我具体的问题,这样我可以产生更好的解决方案 我认为你描述了STI和多态性关联。如果这些工艺不适合你的问题,我就不明白了。而且对我来说,这听起来更像是一场灾难。你解释了你想建立什么。你能不能解释一下你为什么需要这样做,以及你试图以一种不那么抽象的方式实现什么?@spickermann我提供了背景信息来说明我想做什么。问题的核心是,“在Rails中,不使用STI创建异构集合的正确方法是什么?”我认为您描述了STI和多态关联。如果这些工艺不适合你的问题,我就不明白了。而且对我来说,这听起来更像是一场灾难。你解释了你想建立什么。你能不能解释一下你为什么需要这样做,以及你试图以一种不那么抽象的方式实现什么?@spickermann我提供了背景信息来说明我想做什么。问题的核心是,“在Rails中,不使用STI创建异构集合的正确方法是什么?”在您的示例中,
companyable
看起来像什么?companyable在表companyable\u id和companyable\u type中有两个字段,其中id表示上述示例中类型的记录编号,可以是项目、催化剂或战略计划。在您的示例中,companyable
看起来像什么?companyable在表companyable\u id和companyable\u type中有两个字段,其中id表示上述示例中类型的记录编号,可以是项目、催化剂或战略计划。