2016-04-12 7 views
0

私は探していますが、解決策が見つかりません。複数のモデル間で、Solrを検索しても検索結果にリダイレクトされない

私は、私のレールアプリで複数のモデル間で検索を作成しています。今は、ユーザーとコミュニティの2つのモデルでセットアップしています。私の検索は、 '/ search'に行き、その後、nav barで検索を実行するとうまくいきます。

私の問題は、ユーザーがnavのメイン検索バーで何かを検索しようとすると、リダイレクトや「/ search」への転送ではないということです。それはちょうど転送し、以下のリンクへ:検索がリダイレクトされ、完了するために

http://localhost:3000/search?utf8=%E2%9C%93&search=&commit=Search

http://localhost:3000/?utf8=%E2%9C%93&search=&commit=Search

しかし、私は実際にそれが行く必要があります。

routes.rbを

get '/search', to: 'search#search' 

検索コントローラ

class SearchController < ApplicationController 

    def search 
    @search = Sunspot.search Community,User do 
     fulltext params[:search] 
    end 
    @results = @search.results 
    end 
end 

community.rb

class Community < ActiveRecord::Base 
    searchable do 
    text :name 
    text :description, :expanded_description 
    end 
end 

user.rb

class User < ActiveRecord::Base 
    searchable do 
    text :username 
    text :name 
    end 
end 

(HAML中)ヘッダビュー

%form.navbar-form.navbar-left 
    = form_tag search_path, method: 'get' do 
    = text_field_tag :search, params[:search], class: 'form-control' 
    = submit_tag "Search", class: 'btn btn-default' 

感謝前もってまたは類似の別の質問がある場合は、道に私をポイントしてください。

以下は私が検索したときのログです。

Started GET "/?utf8=%E2%9C%93&search=new&commit=Search" for ::1 at 2016-04-12 17:01:52 -0400 
Processing by HomeController#index as HTML 
    Parameters: {"utf8"=>"✓", "search"=>"new", "commit"=>"Search"} 
    User Load (0.5ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY created_at DESC LIMIT 1 
    Membership Load (0.4ms) SELECT `memberships`.* FROM `memberships` WHERE `memberships`.`user_id` = 1 
    Rendered home/_communities_blank_state.html.haml (0.6ms) 
    Rendered shared/_footer_ctas.html.haml (0.7ms) 
    Rendered home/_dashboard.html.haml (4.5ms) 
    Rendered home/index.html.haml within layouts/application (8.2ms) 
    Rendered shared/_alerts.html.haml (0.2ms) 
    Rendered shared/_header.html.haml (1.6ms) 

routes.rbを

Rails.application.routes.draw do 
    mount RailsAdmin::Engine => '/admin', as: 'rails_admin' 

    devise_for :users, :controllers => { :registrations => 'users' } 

    devise_scope :users do 
    resources :profiles, controller: "profile" 
    end 

    root to: 'home#index' 

    get 'portal', to: 'home#portal' 

    get '/search', to: 'search#search', as: :search 

    resources :communities do 
    resources :supplements 
    end 

    resources :contacts, only: [:new, :create] 
    get '/contact_us' => 'contacts#new' 

    mount Ckeditor::Engine => '/ckeditor' 

end 

答えて

0

私はあなたがform_tag search_pathを使用したい場合は、あなたのルートに名前を付ける必要があります確信しています。

あなたroutes.rbで次の手順を実行する必要があります。

get '/search', to: 'search#search', as: :search 

それが動作するはずです。この道を。

+0

残念ながら、動作しませんでした。上記は私のログです。 – AGirlThatCodes

+0

'index'ルートはどのように見えますか?あなたのログには、リクエストが 'SearchController#search'ではなく' HomeController#index'によって処理されていると言われています。 –

+0

私が正しく理解していれば、私のルートがどこにあるのか聞いていますか? '' root to: 'home#index' ''のように。 – AGirlThatCodes

1

私は問題を見つけ出しましたが、残念ながらクラスタグが検索に迷惑をかけることに気付きませんでしたが、それは実現しました。私はフォームの中にform_tagを持っていました。フォームの中にフォームを置くことで、それは私に問題を与えました。

下記のように私の意見を更新しました。

.navbar-form.navbar-left 
    = form_tag search_path, :method => 'get' do 
    = text_field_tag :search, params[:query], class: 'form-control' 
    = submit_tag "Search", class: 'btn btn-default' 
+0

うわー!私はあなたがそれを作ってうれしいです!私たちがこれを解決しようとしたときにバグを起こしましたが、それは無関係だと思いました。これは通常次のように行われます: '= form_tag search_path、:method => 'get'、:html => {:class => '[あなたのクラス]'}} do'問題 :) –

関連する問題