0

RailsとMySQLの使用。これが尋ねられたかどうかはわかりませんが、見つかりませんでした。

私は次の記録を持っています:

1. I love Rails
2. I love Django
3. I code using Ruby on Rails

====

(1)検索:「ilove」

結果:「Railsが大好き」、「 Djangoが大好き」

====

(2)検索:「愛」

結果:「Railsが大好き」、「 Djangoが大好き」

====

(3)検索:「ails」

結果:「Railsが大好き」、「RubyonRailsを使用してコーディングする」

====

(4)検索:「コードRuby」

結果:「RubyonRailsを使用してコーディングします」

====

私のコードは次のとおりです。

term = "%#{params[:term]}%"
shops = Shop.where("name LIKE ?", term)

検索(1)と(2)でのみ機能します。検索(3)と(4)を実行するときにも、結果を達成するようにコーディングするにはどうすればよいですか?

どうもありがとう。

4

2 に答える 2

2

これにはワイルドカードが必要になると思います(生のSQLで)

LIKE '%ails'

またはより一般的に:

LIKE '%substring%'
于 2013-02-18T17:33:12.723 に答える
0

解決策を見つけました。

検索フレーズの各単語を。でラップする必要があり%string%ます。

====

検索(1):「大好き」

クエリ:SELECT * from t WHERE name LIKE "%i% %love%";

結果:「Railsが大好き」、「Djangoが大好き」

====

検索(2):「愛」

クエリ:SELECT * from t WHERE name LIKE "%love%";

結果:「Railsが大好き」、「Djangoが大好き」

====

検索(3):「ails」

クエリ:SELECT * from t WHERE name LIKE "%ails%";

結果:「Railsが大好き」、「RubyonRailsを使用してコーディングする」

====

検索(4):「コードRuby」

クエリ:SELECT * from t WHERE name LIKE "%code% %Ruby%";

結果:「RubyonRailsを使用してコーディングします」

====

私のRubyコードは次のようになります。

term = "#{params[:term]}"
f_term = term.gsub /\b/, '%'
shops = Shop.where("name LIKE ?", f_term)

これはhttp://sqlfiddle.com/#!2/d63f5/4でテストできます

于 2013-02-19T03:49:31.500 に答える