2011-12-15 11 views
21

Metni sözcük testi içeren tüm belgeleri bulmaya çalışıyorum. Aşağıdakiler iyi çalışıyor: Ancak, kullanıcı tarafından sağlanan bir dizeyi aramak istiyorum. Aşağıda işe yarayacağını düşündüm ama öyle değil:LIKE/regex değişkenini mongoid cinsinden kullanın

Aklıma her şeyi denedim
searchterm = (params[:searchlogparams][:searchterm]) 
@tweets = Tweet.any_of({ :text => "/.*"+searchterm+".*/" }) 

, herkes ben bu işi yapmak için neler yapabileceğini biliyorum.

Şimdiden teşekkürler.

+0

var. –

cevap

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

veya

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

Orada gibi arama yapmak istiyorsam ne yapmam gerekiyor Yer Mumbai ve ben Mumbai, Maharashtra, Hindistan gibi konumdan geçiyorum ama arama değil .. İşte benim sorgu Event.any_of (yer: /.*mumbai maharashtra. */is) .entries. O zaman bir mumbai geçiriyorum, o zaman işe yarar. Lütfen öneriniz –

+0

Bu benim için çalıştı – fmquaglia

15

Moodod düzenli ifadesiyle ilgili bir sorun yok. Sorun değişkenleri ruby ​​regex dizesine geçirmektir. Yerine

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

bu

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

Teşekkür bir demet, Ramesh. "Başlangıçta ve sonda ve sonra mükemmel bir şekilde çalıştı." Brilliant! – Hinchy

+0

yardımcı oldu :) – RameshVel

+0

Kötü amaçlı kod enjeksiyonuna karşı savunmasız değil mi? – Aleksey

0

Bu deneyin

Normal dizeleri gibi regex ile dize getiremezsiniz yaparak benim için çalıştı:

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

iştir, ancak hiçbir sonuç

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

ok ve bir sonuç

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

iştir, hiçbir sonuç

var Benim mongoid sürüm 3.1.3 ve yakut versiyonu 1 .9.3

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

ok ve ben "i" sonunda harf duyarlı olmadan bu işi yapmak için orada /.*test.*/i eklemek gerektiğini düşünüyorum bir sonuç