Ruby on Rails - Criteria - Mongoid - where 条件为 2 x 2 列

Posted

技术标签:

【中文标题】Ruby on Rails - Criteria - Mongoid - where 条件为 2 x 2 列【英文标题】:Ruby on Rails - Criteria - Mongoid - where condition with 2 by 2 columns 【发布时间】:2021-03-10 03:39:04 【问题描述】:

我正在使用 RoR + MongoDB (Mongoid),我需要使用 2 列或条件来应用过滤器。

我看到了一些类似这样的建议,但没有奏效。

query = query.where(name: /#attributes[:name]/i).or(query.where(email: /#attributes[:email]/i))

如果我使用这个,看起来 or 将适用于所有条件:

query = query.where(name: /#attributes[:name]/i).or(email: /#attributes[:email]/i)

有人有什么建议吗?

【问题讨论】:

这些查询会产生什么?您想要的结果是什么? 我得到的结果是:SELECT * FROM people WHERE name LIKE '%mateus%' OR email LIKE '%mateus%' 我想要这个结果:SELECT * FROM people WHERE (name LIKE '%mateus %' OR email LIKE '%mateus%') 我需要将“OR”仅应用于姓名和电子邮件,而不应用于其后应用的条件。 这已经是Mongoid的行为了。 【参考方案1】:

据我了解,正确的查询应该是:

query = query.or([name: /#attributes[:name]/, email: /#attributes[:email]/i])

这将返回具有name 属性且值来自attributes[:name] 的文档或具有email 属性且值来自attributes[:email] 的文档

这能回答你的问题吗?

【讨论】:

以上是关于Ruby on Rails - Criteria - Mongoid - where 条件为 2 x 2 列的主要内容,如果未能解决你的问题,请参考以下文章

ruby on rails如何安装

ruby on rails - 问题捆绑安装nokogiri 1.7.2 on ruby on rails 4.x.

Ruby on Rails入门篇

markdown [rails:devise] Ruby on Rails的身份验证gem。 #ruby #rails

ruby Ruby on Rails:常见路由

ruby Ruby on rails类