【问题标题】:Ruby on Rails difficult queryRuby on Rails 难查询
【发布时间】:2024-01-19 17:46:02
【问题描述】:

我需要创建困难的查询,但我不明白如何以更有效的方式做到这一点。

情况如下:

class Owner
  has_many: A
end

class A
  has_many: C
end

# category: string
class B
  has_many: C
end

# flag: boolean
class C
  belongs_to: A
  belongs_to: B

  scope :filtered, -> { where(b: { category: 'smth' }) }
end

我需要获取属于特定所有者的所有 A 记录,但以下人员除外:

a.c.filtered.last.flag == true

a.c.filtered 可以为空,a.c 可以为空,在这种情况下我不需要排除这样的 A 记录。

当然,我可以在for循环中这样做,但是我的记录太多,我认为这不是一种有效的方式。

【问题讨论】:

  • 目前还不清楚您真正希望从查询中得到什么。您能否使用实际工作的模型改进示例,添加您正在寻找的数据和输出示例?

标签: sql ruby-on-rails rails-activerecord


【解决方案1】:

这样的东西应该可以吗?

A.where(c: C.filtered.where(flag: true)) 

【讨论】: