2011-12-15 14 views
21

テキストにtestという単語が含まれているすべての文書を検索しようとしています。以下はうまく動作します:mongoidで変数付きのLIKE /正規表現を使用する

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

しかし、私はユーザーが指定した文字列を検索できるようにしたいと考えています。

私が考えることができるすべてを試しましたが、誰でもこの仕事をするために何ができるのか知っています。

ありがとうございます。

+0

を発生しています。 –

答えて

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

または

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

私はそこにあるように検索したいのですがロケーションムンバイと私はムンバイ、マハラシュトラ、インドのような場所を通過しています。しかし、それは検索されていません..ここで私のクエリEvent.any_of(location:/.*mumbai maharashtra。*/is).entries。私はムンバイを渡してその仕事をしています。提案してください。 –

+0

これは私のために働いた – fmquaglia

15

mongodb正規表現のクエリに問題はありません。問題は、変数をルビ正規表現の文字列に渡すことです。あなたの代わりに

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

この

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

おかげで、Ramesh。 – Hinchy

+0

助けてくれてうれしいです:) – RameshVel

+0

悪意のあるコードの挿入に脆弱ではありませんか? – Aleksey

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+".*") }) 

はOKではないと

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

は仕事、ない結果

で発生している:実行して、私のために働きました私のモンゴイドバージョンは3.1.3で、ルビバージョンは1です.9.3

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

大丈夫です、私はあなたが「i」が末尾に大文字と小文字が区別されずにその仕事をするためにそこに/.*test.*/i追加すべきだと思う

関連する問題