Ruby on rails 是否可以在活动记录中使用“包含”实现“或”?

Ruby on rails 是否可以在活动记录中使用“包含”实现“或”?,ruby-on-rails,activerecord,ruby-on-rails-4,rails-activerecord,Ruby On Rails,Activerecord,Ruby On Rails 4,Rails Activerecord,我试图从ActiveRecord模型中进行查询,我们称之为用户: 用户有很多:项目 项目有一个:东西 用户通过::项目拥有很多:东西 我感兴趣的是找到所有项目,要么有已经完成的东西,要么根本没有东西 几次尝试: projects.includes(:thing).where( things: { status: :complete } ).or( things: { id: nil } ) 或 如果可能的话,我更愿意在没有SQL的情况下完成这项工作,即使是这样: query = pro

我试图从ActiveRecord模型中进行查询,我们称之为用户:

用户有很多:项目 项目有一个:东西 用户通过::项目拥有很多:东西 我感兴趣的是找到所有项目,要么有已经完成的东西,要么根本没有东西

几次尝试:

projects.includes(:thing).where(
  things: { status: :complete }
).or(
  things: { id: nil }
)

如果可能的话,我更愿意在没有SQL的情况下完成这项工作,即使是这样:

query = projects.includes(:thing)
query.where(things: {id: nil}) & query.where(things: {status: :complete})

所以这可能对你有用,也可能不有用,但是试试看

query=项目。包括:thing query.wherethings:{id:nil}.joins query.wherethings:{status::complete}


我自己无法测试这个atm,但我真的很好奇它是否真的能将这两个查询连接在一起。我稍后会处理它

实际上,我想在结果中添加一个.order:start\u date,因此我不能使用&因为这将返回一个数组,而不是activerecord关系。有人能做这一个查询吗?我想看看是否有一种方法可以做到这一点,也许可以使用部分sql查询。但是仍然让activerecord来处理“包含”。如果您唯一的问题是排序,那么您可以先进行排序,然后再进行映射。喜欢项目。顺序:start\u date.map等
query = projects.includes(:thing)
query.where(things: {id: nil}) & query.where(things: {status: :complete})