Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在第三个模型中连接两个Rails ActiveRecord模型_Ruby On Rails_Ruby_Rails Activerecord - Fatal编程技术网

Ruby on rails 在第三个模型中连接两个Rails ActiveRecord模型

Ruby on rails 在第三个模型中连接两个Rails ActiveRecord模型,ruby-on-rails,ruby,rails-activerecord,Ruby On Rails,Ruby,Rails Activerecord,我的问题如下: 我有两个模型,A和B。现在我想创建第三个模型C,它引用其他两个模型A和B,这样模型C的一个对象可以“容纳”A和B的多个对象 我想用它做什么: 模型A和B都有一个名为:hero_image的属性。现在我想展示A和B的所有:英雄_图像,它们被连接到C的对象中 事实上,我根本不确定我是否需要模型C。 我有项目和比赛,我想加入他们的收藏 projects = Project.where.not(hero_image: nil) competitions = Competition.whe

我的问题如下: 我有两个模型,A和B。现在我想创建第三个模型C,它引用其他两个模型A和B,这样模型C的一个对象可以“容纳”A和B的多个对象

我想用它做什么: 模型A和B都有一个名为:hero_image的属性。现在我想展示A和B的所有:英雄_图像,它们被连接到C的对象中

事实上,我根本不确定我是否需要模型C。 我有项目和比赛,我想加入他们的收藏

projects = Project.where.not(hero_image: nil)
competitions = Competition.where.not(hero_image: nil)
现在我想加入这两个系列

我追错了兔子。我只需要

collection_of_proj_and_comps = projects + competitions
collection_of_proj_and_comps = projects + competitions

谢谢你的建议。确实让我重新思考了这个问题。

您仍然可以使用
union
管道操作符来连接两个ActiveRecord对象列表

projects = Project.where.not(hero_image: nil)
competitions = Competition.where.not(hero_image: nil)
collection_of_proj_and_comps = projects | competitions
这将获得同一列表中所有这些对象的数组

我只想添加测试,以确保它们都“嘎嘎”地互相喜欢。因此,添加测试以确保它们都响应
hero\u image
,以及您稍后将使用此联合集合执行的其他操作


预编辑问题的旧答案

为了便于输入语法,我将使用有许多帖子和评论的用户重新制作场景

在用户类中,您可以执行以下操作

@user.comments.pluck(:hero_image) | @user.posts.pluck(:hero_image)

这将创建两个数组,然后合并,从两个查询之间的重叠中删除任何重复条目。

这实际上取决于您试图实现的目标,但您可以尝试将此视图添加到数据库中(不要与MVC中的视图混淆)

(请注意,数据库的语法可能不同,这是Oracle语法)

如果您在数据库中查询这些,您将看到英雄图像,以及它的来源

如果然后编写一个名为HeroMage的模型,它将返回所需的数据

您可能还需要一个指向源的链接

class HeroImage < ActiveRecord::Base

  primary_key :source_id

  belongs_to :source, polymorphic: true

end
类英雄图像
我不确定这是否是你想要的,但它应该把所有的数据都收集起来


这是在做什么:

数据库视图是一个固定的SQL语句,可以像表一样进行查询(但是只读的)

union语句将返回两个或多个SQL语句的结果,这些SQL语句的列名与单个结果表的列名相同

多态引用使用*\u类型确定相关对象属于哪个模型,并使用*\u id查找特定实例

projects = Project.where.not(hero_image: nil)
competitions = Competition.where.not(hero_image: nil)
我追错了兔子。我只需要

collection_of_proj_and_comps = projects + competitions
collection_of_proj_and_comps = projects + competitions

展示您尝试过的代码会很有帮助。您描述的内容听起来像“多态性”,但如果没有更多的上下文,将很难提供帮助。