[英]Is there a method like “ILIKE” I can use in a Rails conditional statement?
[英]how can I write LIKE statement in rails for mongodb
當我使用整個單詞時,搜索仍然有效,但我也希望部分單詞能夠被識別。
我在這里有表格:
= 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
Mongoid支持查詢中的正則表達式
User.where(:name => /.*anand.*/i )
在這里我為非區分大小寫的匹配。
要么
search_term = params[:search_term]
User.where({:name => Regexp.new ("/.*"+search_term+".*/") })
您可以在reg對象中編寫任何正則表達式
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.