【问题标题】:Rails ActiveRecord::Relation object using including modelsRails ActiveRecord::Relation 对象使用包含模型
【发布时间】:2012-06-30 01:12:02
【问题描述】:

我需要从两个相似但不相同的独立模型中检索信息。我正在尝试做类似

的事情

我研究了一些方法,但是它们返回一个活动对象数组而不是一个 我的应用程序的许多功能都需要 ActiveRecord::Relation。

有什么方法可以返回一个包含两个表并集的 ActiveRecord::Relation 对象?

我尝试过类似的东西

@group = Mymodel.find_by_sql("SELECT id FROM Mymodels 
  UNION SELECT id FROM AnotherModels")

并且还使用 Model.where 方法进行了探索,但是无法返回 ActiveRecord::Relation

编辑:

为了清楚起见,我需要返回 ActiveRecord::Relation,它是两个表的联合或合并

【问题讨论】:

    标签: sql ruby-on-rails ruby


    【解决方案1】:

    你试过MyFirstModel.joins(:my_second_models)吗?在 API here 中查看详细信息 joins

    编辑:单表继承是解决此问题的更好方法。请参阅下面的 cmets。

    【讨论】:

    • 嘿,谢谢,但不确定这就是我要找的。尽管我需要返回包含两个模型的所有对象的记录,但我不想将这两个表连接在一起。这更像是联合
    • 啊,我现在更了解你的问题了。我认为您应该研究单表继承:基于同一个数据库表创建两个模型。这样,您可以通过关联轻松提取所有内容,但您可以为每个模型创建独特的属性和方法。
    • 酷我已经研究过这个,但希望在我扩展现有应用程序时会有一种更简单的方法。另外会有很多空列。但似乎这可能是唯一的方法
    • 处理空列的两个选项:创建与所有“额外”列的has_one关联,以便它们可以存储在另一个表中,或创建文本data列和@987654326 @,这将允许您将附加属性存储在哈希中(缺点:您将无法使用 SQL 来搜索它们)。或者,当您有足够的容量时,您可以稍后担心效率(这是我选择的解决方案!)
    【解决方案2】:

    试试这样的:

    Model.joins(:other_model).where("attr1" = :attr1,
                                   { attr1: "example" }).group(:attr1)
    

    由于您评论了where,我在调用中添加了where 方法。最后,您还可以使用:group 对所有内容进行分组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      相关资源
      最近更新 更多