【问题标题】:Query has_many relationship, contains this and also this查询 has_many 关系,包含这个和这个
【发布时间】:2016-04-07 15:24:49
【问题描述】:
# engine.rb
has_many :pistons

#piston.rb
belongs_to :engine

活塞有一个柱子,piston_count,当然还有engine_id

我的数据库有以下 7 条记录

Engine.all
#=> [#<Engine id: 1>, #<Engine id: 2>, #<Engine id: 3>]

Piston.all
#=> [#<Piston id: 1, engine_id: 1, piston_count: 1>, #<Piston id: 2, engine_id: 1, piston_count: 2>, #<Piston id: 2, engine_id: 2, piston_count: 1>, #<Piston id: 2, engine_id: 3, piston_count: 2>]

我想写一个查询,返回包含piston_count1 的活塞的Engine,还包含piston_countpiston_count

我试过... 引擎 = Engine.joins(:pistons).merge(Piston.where(piston_count: 1)) #=> [#, #] engine.joins(:pistons).merge(Piston.where(piston_count:2)) #=> []

它返回一个空数组,因为活动记录将它变成了一个 AND 子句。但是,如果我执行 OR 语句,它将返回太多记录。有什么想法吗?

【问题讨论】:

    标签: mysql ruby-on-rails activerecord


    【解决方案1】:

    想通了。这需要两个 Active Record 查询的交集。

    engine_ids = Engine.joins(:pistons).merge(Piston.where(piston_count: 1)).pluck(:id) & Engine.joins(:pistons).merge(Piston.where(piston_count: 2)).pluck(:id)
    

    然后返回并检索所有相交。

    Engine.where(id: engine_ids)
    

    【讨论】:

      猜你喜欢
      • 2021-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      相关资源
      最近更新 更多