2013-08-19 20 views
0

在我的Rails應用程序中,我有一個通用搜索來顯示匹配結果。我所做的產生匹配結果是用「%」符號替換空格。它的工作很完美,但前提是搜索詞之間有差距。如果我輸入一個單詞,它會顯示「沒有匹配的字符串」。軌道上的紅寶石正則表達式

class TweetsController<ApplicationController 
    def index 
    city = params[:show] 
    search_term = params[:text]   
    search_term[" "] = "%" 

    city_coordinates = Coordinates.where('city=?', city) 
    @tweets = if (city_coordinates.count == 1 && city_coordinates.first.valid_location?)      
     Tweets.for_coordinates(city_coordinates.first) & Tweets.where("tweet_text LIKE?" ,"%#{search_term}%").all      
     else if (Coordinates.count != 1) 
     Tweets.for_user_location(city) & Tweets.where("tweet_text LIKE ?" , "%#{search_term}%").all 
     else 
     @tweets = Tweets.where("%tweet_text% LIKE ? ", "%#{search_term}%").all 
     end 
    end 
    end 
end 

我得到的輸出只有當我輸入兩個詞,如「哈伯賈恩·辛格」,「VVS拉克斯曼」。如果我輸入一個單詞,表示沒有匹配的字符串。任何人都可以幫助我。我需要輸出兩種方式用戶輸入一個單詞或兩個單詞或更多。任何人都可以幫助我。

+2

在旁註中,考慮使用Solr進行用戶搜索。你的方法總會產生不好的結果。 – bluehallu

回答

1

我對自己的正則表達式不太瞭解,所以我通常會轉向Rubular。它可以幫助您構建和測試Ruby的正則表達式。

+0

但是,這個問題中的代碼使用SQL'LIKE'表達式,它與Ruby正則表達式的語法非常不同。所以Rubular在這裏無濟於事。 –

2

也許,您得到的

IndexError: string not matched 

那是因爲當有一個字在PARAMS未來[:文],此代碼

search_term[" "] = "%" 

引發錯誤。

您可能想要閱讀字符串documentation以獲取更多詳細信息。它指出:

如果正則表達式或字符串被用作索引不匹配字符串中的位置,IndexError上升。

希望這會有所幫助。