如何在Rails中进行部分搜索?

时间:2019-06-28 11:56:38

标签: ruby-on-rails mongoid

我正在尝试获取不属于当前用户的所有卡,并且其标题包含一些关键字。

经过研究,到目前为止,我得到的是下面的代码。

@other_cards = Card.where(:user_id.ne => @temp_current_user, "title LIKE ?" => "%Business%").limit(10).order('created_at desc down_title asc')

但是,即使认为它们存在,也不会返回任何记录。

我还试图跳过:user_id条件以及所有限制和命令,导致此简单代码检查它是否会返回任何内容

@other_cards = Card.where("title LIKE ?", "%Business%")

enter image description here

编辑

我也尝试将条件作为第一个注释中建议的数组放置。也导致了错误

enter image description here

编辑2

附加在Rails控制台中运行查询的屏幕截图

enter image description here

1 个答案:

答案 0 :(得分:1)

LIKE语法是SQL的一部分。 MongoDB和Mongoid不(直接)支持SQL。一般的经验法则是将Ruby方法从ActiveRecord继承到Mongoid,例如以下对AR和Mongoid都适用:

Card.where(id: 123)

...但是一旦您开始在键或值中指定复杂条件,它们通常特定于您正在使用的数据库。在您提供的代码中,:user_id.ne语法不会被ActiveRecord识别,而Mongoid / MongoDB无法识别title LIKE ?

您的问题陈述是:

  

我正在尝试获取所有不属于当前用户的卡,并且其标题包含一些关键字

MongoDB具有本机全文搜索功能,这是尝试将关键字与正则表达式或SQL LIKE运算符进行匹配的高级解决方案。 MongoDB在全文搜索here方面有很好的文档。 Ruby驱动程序包含有关如何使用全文本搜索here的更多文档和示例。 Mongoid当前没有用于全文本搜索的文档(正在进行添加here的拉动请求),但要旨是将先前参考的驱动程序文档与文档here结合在一起以了解如何通常可以使用Mongoid中的索引。