Rails 5:ActiveRecord AND后跟OR条件:A&& (B || C)

时间:2017-07-24 10:28:03

标签: ruby-on-rails ruby activerecord

我的以下有效记录声明工作正常:

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))

2 个答案:

答案 0 :(得分:0)

Rails 5: ActiveRecord OR query

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

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

答案 1 :(得分:0)

使用AND(十字路口)进行组合,如Tom Lord所提到的那样merge

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