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 - 问题捆绑安装nokogiri 1.7.2 on ruby on rails 4.x.