【问题标题】:Rails 5: ActiveRecord AND followed by OR condition: A && (B || C)Rails 5:ActiveRecord AND 后跟 OR 条件:A && (B || C)
【发布时间】:2017-12-29 21:32:16
【问题描述】:

我下面的活动记录语句工作正常:

Requirement.where(no: 0)

Requirement.yes_no.or(Requirement.where.not(parent_req: nil))

在需求模型中,我有一个 enum 字段,它也可以正常工作:

enum response_type: { yes_no: 0, document: 1, interviewee: 2, sample_set: 3, brief_desc: 4 }

但是当我结合以上两个语句时:

Requirement.where(no: 0).where(Requirement.yes_no.or(Requirement.where.not(parent_req: nil)))

它给了我错误:

ArgumentError: Unsupported argument type: #<Requirement::ActiveRecord_Relation:0x005567c7c9bf88> (Requirement::ActiveRecord_Relation)

我希望运行以下查询:

SELECT `requirements`.*
  FROM `requirements`
 WHERE `requirements`.`no` = 0
   AND (`requirements`.`response_type` = 0 
    OR (`requirements`.`parent_req` IS NOT NULL))

【问题讨论】:

  • 应该是merge
  • Requirement.where(no: 0).merge(Requirement.yes_no.....)
  • 是的,它奏效了。谢谢!

标签: ruby-on-rails ruby activerecord


【解决方案1】:

Rails 5: ActiveRecord OR query

Requirement.yes_no.or(Requirement.where.not(parent_req: nil)).where(no: 0)

where(no: 0)放在ar查询的末尾

【讨论】:

    【解决方案2】:

    使用AND(交叉点)进行组合,Tom Lord 提到的merge 起作用了。

    Requirement.where(no: 0).merge(Requirement.yes_no.or(Requirement.where.not(parent_req: nil)))
    

    【讨论】:

      猜你喜欢
      • 2011-06-13
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-11
      • 2015-10-14
      • 1970-01-01
      相关资源
      最近更新 更多