2011-12-15 53 views
21

我試圖找到其文本包含單詞test的所有文檔。下面的工作正常:在mongoid中使用LIKE/regex與變量

@tweets = Tweet.any_of({ :text => /.*test.*/ }) 

但是,我希望能夠搜索用戶提供的字符串。我想下面的工作,但它並不:

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

我用盡了一切我能想到的,任何人都知道我能做些什麼,使這項工作。

在此先感謝。

+0

我想你應該加上「i」的末端有/.*test.*/i,使這項工作而不區分大小寫。 – 2013-03-27 08:41:09

回答

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

searchterm = (params[:searchlogparams][:searchterm]) 
@tweets = Tweet.any_of({ :text => /.*#{searchterm}.*/ }) 
15

mongodb正則表達式查詢沒有任何問題。問題是將變量傳遞給ruby正則表達式字符串。與正則表達式像普通字符串

不能混合字符串,而不是

"/.*"+searchterm+".*/" 

試試這個

>>searchterm = "test" 
    >>"/#{searchterm}/" 
    >> "/test/" 
+4

謝謝你,Ramesh。我不得不刪除「在開始和結束,然後你的例子完美地工作。輝煌! – Hinchy 2011-12-15 16:49:01

+0

高興它幫助:) – RameshVel 2011-12-15 16:50:07

0

這工作對我來說這樣做:

Model.find(:all, :conditions => {:field => /regex/i}) 
0
@tweets = Tweet.any_of({ :text => Regexp.new ("/.*"+searchterm+".*/") }) 

是工作,但沒有任何結果

@tweets = Tweet.any_of({ :text => Regexp.new (".*"+searchterm+".*") }) 

是確定的,並有結果

@tweets = Tweet.any_of({ :text => /.*#{searchterm}.*/ }) 

是工作,沒有結果

我的mongoid版本是3.1.3,ruby版本是1 .9.3

1
@tweets = Tweet.any_of({ :text => Regexp.new (".*"+searchterm+".*") }) 

是確定的,並有結果