ruby-on-rails - 如何在 mongodb 的 Rails 中编写 LIKE 语句
问题描述
当我使用整个单词时搜索正在工作,但我也希望识别部分单词。
我这里有表格:
= form_tag({}, method: :get) do
= text_field_tag :query, query, class: 'form-input search__input', placeholder: t('.placeholder')
- if query.nil?
%span.search__icon.fa.fa-search{ aria: { hidden: 'true' } }
- else
= link_to more_path do
%span.search__icon.text-success.fa.fa-times{ aria: { hidden: 'true' } }
控制器:
def set_query
@query = params[:query]
end
def set_documents
@documents = @folder ? @folder.documents : current_user.documents
@documents = (params[:query] ? @documents.where(
:$text => {:$search => params[:query]}
) : @documents).page(params[:page])
end
我试图在控制器中添加它以使其按我的意愿工作:
@documents = Document.where('name LIKE ?', "%#{@query}%")
end
但后来我得到了错误:
wrong number of arguments (given 2, expected 1)
我应该如何写这个,以便搜索不仅可以用于整个单词,还可以用于部分单词。
解决方案
如果你使用 mongoid,你可以在你的where
:
Document.where(name: /.*(#{@query})+.*/i)
或尝试any_of
:
Document.any_of(name: /.*(#{Regexp.escape(@query)}).*/i)
所以你的set_documents
方法应该是这样的:
def set_documents
@documents = @folder ? @folder.documents : current_user.documents
@documents = (params[:query] ? @documents.where(
name: /.*#{@query}.*/i
) : @documents).page(params[:page])
end
推荐阅读
- dart - ListView/Column 中的 DropdownButton 导致呈现错误
- database - 如何为每日事件日志构建数据库?
- c++11 - 将带有模板参数的仿函数传递给模板函数
- c# - 如何扩展参数以添加旋转方向?
- r - 在 RStudio 中手动中断时优雅地停止 mclapply 集群?
- javascript - Owlcarousel 2.3.4 版和自定义 owl carousel addClassActive 不起作用
- apache - Apache 重写以对 admin.example.com 使用不同的 index.php
- verilog - 在verilog中创建时间延迟的问题
- python - 使用 pandas groupby 获取与最小值对应的行
- android - 无法为 android 编译 x264 库,错误描述:clang:error no such file or directory