在mongoid中使用LIKE/regex和变量

Hin*_*chy 22 ruby-on-rails mongodb mongoid ruby-on-rails-3.1

我正在尝试查找其文本中包含单词test的所有文档.以下工作正常:

@tweets = Tweet.any_of({ :text => /.*test.*/ })
Run Code Online (Sandbox Code Playgroud)

但是,我希望能够搜索用户提供的字符串.我认为下面的内容可行,但不会:

searchterm = (params[:searchlogparams][:searchterm])
@tweets = Tweet.any_of({ :text => "/.*"+searchterm+".*/" })
Run Code Online (Sandbox Code Playgroud)

我已经尝试了我能想到的一切,任何人都知道我能做些什么来使这项工作.

提前致谢.

Nat*_*Nat 27

searchterm = (params[:searchlogparams][:searchterm])
@tweets = Tweet.any_of({ :text => Regexp.new ("/.*"+searchterm+".*/") })
Run Code Online (Sandbox Code Playgroud)

要么

searchterm = (params[:searchlogparams][:searchterm])
@tweets = Tweet.any_of({ :text => /.*#{searchterm}.*/ })
Run Code Online (Sandbox Code Playgroud)


Ram*_*Vel 15

mongodb正则表达式查询没有任何问题.问题是将变量传递给ruby regex字符串.您不能像普通字符串那样将字符串与正则表达式混合使用

代替

 "/.*"+searchterm+".*/"
Run Code Online (Sandbox Code Playgroud)

试试这个

  >>searchterm = "test"
  >>"/#{searchterm}/"
  >> "/test/" 
Run Code Online (Sandbox Code Playgroud)

  • 谢谢一堆,拉梅什.我不得不删除"开始和结束,然后你的例子完美地工作.很棒! (4认同)