2017-05-21 11 views
1

私は基本的な検索を構築しようとしている場合は、完全な検索用語だけが結果を示しています。現在は、個々の単語に基づいて結果を表示しています。正確な検索は、レールで

ここでは、モデルからコードです:事前に

def search 
    find(:all, :conditions => ['term' == "%#{search}%"]) 
end 

申し訳ありませんが。私はレールがとても新しいです!

ありがとうございます。

+1

を(:すべて:条件=> [ '用語' == "#{検索}"])Railsのの' – Pavan

+0

どのバージョン使いますか? – spickermann

+0

Rails 5.0.0を使用しています – TWill24

答えて

1

%を"%#{search}%"から削除してください("#{search}")。

%は、単語を含むすべての結果に一致するワイルドカードです。たとえば"%tea%"は、あなたが望むものでないときには、涙、ネステア、スチームと一致します。

これは完全一致得られるはず:あなたのコードはいくつかの理由のために動作しません

def search find(:all, :conditions => ['term' == "#{search}"]) end

+0

ありがとうございますが、まだ問題があります。たとえば、1つの文字「a」や例を検索すると、その名前に「a」という文字を含むすべてのリストが表示されます。 – TWill24

+1

私のdef検索は何らかの理由で何の影響も与えないようです。私はそれをすべて削除しましたが、私はまだ同じ結果を得ています。 ここにはビューのコードがあります: '<%= form_tag root_path、:method => 'get'、:class =>" input- ":form-control"、:placeholder => "ベスト検索..."、::検索:params [:search]、リモート:true、:class = => "btn search-btn btn-lg"%> 'autofocus => true%<%= submit_tag" Search "、:name => nil、 – TWill24

1

を。

  1. このメソッドには値を渡しません。したがって、searchは常にnilになります。
  2. ['term' == "%#{search}%"]の条件はあまり意味がありません。前に述べたように、searchは定義されていないため、条件は['term' == "%%"]と同じです。文字列term%%と等しくないため、基本的には全体の状態は[false]です。
  3. Rails 5.0では、クエリに異なる構文が使用されています。使用した構文は非常に古く、もはや動作しません。

私はこのようなものだろう:見つけ `試してみてください

# in your model 
scope :search, -> (q) { 
    q.present? ? where("column_name LIKE :query", query: "%#{q}%") :none 
} 

# in your controller 
def set_index 
    @b = Best.search(params[:search]).order(:cached_weighted_score => :desc) 
end 
関連する問題