Ruby on rails 在第三个模型中连接两个Rails ActiveRecord模型
我的问题如下: 我有两个模型,A和B。现在我想创建第三个模型C,它引用其他两个模型A和B,这样模型C的一个对象可以“容纳”A和B的多个对象 我想用它做什么: 模型A和B都有一个名为:hero_image的属性。现在我想展示A和B的所有:英雄_图像,它们被连接到C的对象中 事实上,我根本不确定我是否需要模型C。 我有项目和比赛,我想加入他们的收藏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
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
展示您尝试过的代码会很有帮助。您描述的内容听起来像“多态性”,但如果没有更多的上下文,将很难提供帮助。