【问题标题】:ActiveRecord - find parentsActiveRecord - 寻找父母
【发布时间】:2012-06-08 20:23:57
【问题描述】:

我想找到有孩子的东西。所以给定:

class Foo < ActiveRecord::Base
   has_many :bars
   has_many :bazes

   scope :is_a_parent ...what goes here?...

我想得到有任何酒吧任何 bazes 的 Foos。当然,使用原始 SQL,所有事情都是可能的,exists (select 1 from bars ...) or exists (select 1 from bazes ...),但是 yuk。

肯定有某种方法可以将 any? 与 arel or 方法结合使用吗?在不使用 SQL 的情况下还有其他方法吗?

【问题讨论】:

    标签: ruby-on-rails-3 activerecord


    【解决方案1】:

    this 对您有帮助吗?先前的答案是寻找与您相反的答案(没有条形或 baze 的 Foos),但您应该能够反转逻辑。

    【讨论】:

    • 这行不通。它甚至对一个集合都不起作用,因为它会为每个 Foo 返回多行。也许 AR 会解决这个问题,但指望它是有风险的和骇人听闻的。无论如何,我很确定这对于我的两个子集合的场景来说是平淡无奇的。
    【解决方案2】:
    class Foo < ActiveRecord::Base
      has_many :bars
      has_many :bazes    
    
      scope :is_a_parent, (joins(:bars) or joins(:bazes)).uniq
    

    会给你所有的 foos 有一个酒吧或一个 baze

    顺便说一句,通常函数以“is_”开头,应该以“?”结尾,并且应该只返回真/假。

    【讨论】:

      猜你喜欢
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多