Sql Rails ActiveRecord::使用包含模型的关系对象
我需要从两个相似但不相同的独立模型中检索信息。我试着做像这样的事情Sql Rails ActiveRecord::使用包含模型的关系对象,sql,ruby-on-rails,ruby,Sql,Ruby On Rails,Ruby,我需要从两个相似但不相同的独立模型中检索信息。我试着做像这样的事情 @group = Mymodel.find_by_sql("SELECT id FROM Mymodels UNION SELECT id FROM AnotherModels") 我已经研究了一些方法,但是它们返回一个活动对象数组,而不是一个 ActiveRecord::关系,这是我的应用程序的许多功能正常工作所必需的 有没有办法返回包含两个表的并集的ActiveRecord::Relation对象 我试过类似的方法
@group = Mymodel.find_by_sql("SELECT id FROM Mymodels
UNION SELECT id FROM AnotherModels")
我已经研究了一些方法,但是它们返回一个活动对象数组,而不是一个
ActiveRecord::关系,这是我的应用程序的许多功能正常工作所必需的
有没有办法返回包含两个表的并集的ActiveRecord::Relation对象
我试过类似的方法
@group = Mymodel.find_by_sql("SELECT id FROM Mymodels
UNION SELECT id FROM AnotherModels")
并且还探讨了如何使用Model.where方法,但是该方法不能返回ActiveRecord::Relation
编辑:
为了明确起见,我需要返回ActiveRecord::Relation,它是两个表的并集或合并您是否尝试过
MyFirstModel.joins(:my_second_models)
?查看API中的详细信息joins
编辑:单表继承是解决此问题的更好方法。请参阅下面的评论。尝试以下内容:
Model.joins(:other_model).where("attr1" = :attr1,
{ attr1: "example" }).group(:attr1)
由于您评论了
where
,我在调用中添加了where
方法。您还可以使用:group
将所有内容分组。嘿,谢谢,但不确定这就是我要找的。我不想将这两个表连接在一起,尽管我需要返回一个包含两个模型的所有对象的记录。这更像是工会啊,我现在更了解你的问题了。我认为您应该研究单表继承:基于同一个数据库表创建两个模型。通过这种方式,您可以通过关联轻松地提取所有内容,但您可以为每个模型创建独特的属性和方法。很酷,我已经研究过这一点,但希望在扩展现有应用程序时有一种更简单的方法。另外,将有相当多的空列。但似乎这可能是处理空列的唯一方法两个选项:创建一个与所有“额外”列关联,以便它们可以存储在另一个表中,或者创建一个textdata
列和serialize:data
,这将允许您在散列中存储附加属性(缺点:您将无法使用SQL搜索它们)。或者,您可以在以后有足够的容量时担心效率(这是我选择的解决方案!)