我的问题如下: 我有两个模型,A和B。现在我想创建第三个模型C,它引用另外两个模型A和B,这样模型C的一个对象可以“容纳”A和B的多个对象。
我想用它做什么: 模型 A 和 B 都有一个名为 :hero_image 的属性。现在我想显示 A 和 B 的所有 :hero_images,它们加入到 C 的对象中。
实际上我不确定我是否需要模型 C。 我有项目和竞赛,我想将它们加入到一个集合中。
projects = Project.where.not(hero_image: nil)
competitions = Competition.where.not(hero_image: nil)
现在我想加入这两个集合。
我追错了兔子。我所需要的只是
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_image
以及您稍后将使用此联合集合执行的其他操作。
预编辑问题的旧答案
为了便于输入语法,我将重新制作具有许多帖子和评论的用户的场景。
在你的 User 类中你可以做类似的事情
@user.comments.pluck(:hero_image) | @user.posts.pluck(:hero_image)
这将创建两个数组,然后合并,从两个查询之间的重叠中删除任何重复的条目。
关于ruby-on-rails - 在第三个模型中加入两个 Rails ActiveRecord 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50470561/