【问题标题】:How to do partial search in rails?如何在rails中进行部分搜索?
【发布时间】:2019-11-10 09:20:09
【问题描述】:

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

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

@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%")

编辑

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

编辑 2

附上在rails控制台中运行查询的截图

【问题讨论】:

  • 请更新您的 Rails 版本。 Card.where("title LIKE ?", "%Business%") 应该可以工作
  • 请在 Rails 控制台中尝试相同的查询并将其结果查询和输出粘贴到此处。
  • @other_cards = Card.where("user_id = ? AND title LIKE ?", @temp_current_user.id, "%Business%").limit(10).order('created_at desc down_title asc') 请检查此查询
  • @A.A.F 试试这个Card.find({"title": /.*Business.*/})

标签: ruby-on-rails mongoid


【解决方案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 中。

【讨论】:

    猜你喜欢
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 2014-08-27
    • 1970-01-01
    相关资源
    最近更新 更多