Thinking sphinx - search box w aplication_layout

witam.
Próbuję umieścić search box’a w aplication_layout - docelowo ma przeszukiwać tagi jednego z obiektów.
Utworzyłem kontroler search który działa jak należy i sam searchbox wygląda tak:
aplication.html.erb
<%= simple_form_for search_path,:method => :get do |f|%> <p id="search_header"> <%= text_field_tag "SearchInput" %> <%= f.submit %> </p> <% end %>
Takie rozwiązanie działa gdy otwieramy host:/search/show. w każdym innym przypadku otrzymuje błąd routowania.
Rozumiem, że błąd bierze się z tego, że search_path nie jest dostępne z każdego miejsca w aplikacji.
Nie mam jednak pojęcia jak przekazywać parametr z pola tekstowego do kontrolera gdy pole to znajduje się np na stornie głównej.

ew. jeśli ktoś ma pomysł jak można zrealizować to inaczej, to proszę o sugestie.
będę niezmiernie wdzięczny za podpowiedź

Pozdrawiam

cześć

formularz:

= form_tag search_path, method: :get do = text_field_tag "search" = submit_tag "Search"
routes:

match "/search" => "search#index", as: :search

controller:

[code]class SearchController < ApplicationController

def index
@objects = Object.search(params[:search])
end

end[/code]
pozdrawiam :slight_smile:

[quote=Vayneyks]cześć

formularz:

= form_tag search_path, method: :get do = text_field_tag "search" = submit_tag "Search"
routes:

match "/search" => "search#index", as: :search

controller:

[code]class SearchController < ApplicationController

def index
@objects = Object.search(params[:search])
end

end[/code]
pozdrawiam :)[/quote]
Przede wszystkim dzięki za zainteresowanie:)

Próbowałem w taki sposób i w efekcie ten textbox działa tylko gdy znajdujemy się pod adresem host/search. Na wszystkich innych klikanie w search odświezą stronę, a w adres lądują parametry. Np. dla głównej wyglada to tak: http://localhost:3000/?utf8=%E2%9C%93&search=tag1&commit=Search
. Gdyby wygenerowało adres: http://localhost:3000/search/?utf8=%E2%9C%93&search=tag1&commit=Search
wszystko działało by prawidłowo. Wiesz może gdzie robie błąd?

jedyny wpis w routes dotyczący search to: search /search(.:format) search#index

Proszę :slight_smile: Już Ci tłumaczę:

Formularz z wyszukiwaniem jest ustawiony na search_path ( = form_tag search_path). W takim wypadku wszystko co wpiszesz tutaj i wyślesz idzie do kontrolera search. Jeżeli chcesz, by szło do root (tak jak w url który podajesz), musisz zmienić form_tag na:

= form_tag root_path

i tym razem zrobić wyszukiwanie w kontrolerze roota, nie search, czyli

[code]class HomeController < ApplicationController

def index
@objects = Object.search(params[:search])
end

end[/code]
pozdrawiam

[quote=mxaly][…]
Takie rozwiązanie działa gdy otwieramy host:/search/show. w każdym innym przypadku otrzymuje błąd routowania.
Rozumiem, że błąd bierze się z tego, że search_path nie jest dostępne z każdego miejsca w aplikacji.
[…][/quote]
search_path to named helper generowany na podstawie routes.rb. Takie helpery są widoczne w każdym widoku i w każdym kontrolerze.
Błąd bierze się z tego, że simple_form_for to “nakładka” na railsowy form_for, który oczekuje w parametrze obiektu ActiveRecord (a ściślej obiektu z mixinem active model / naming bodaj) lub ew. nazwy klasy takiego obiektu (symbol/string).
Ze ścieżką sobie nie poradzi (w przeciwieństwie do helpera form_tag, który służy właśnie do tego, tak jak zasugerował Vayneyks) i ustawia action na ‘/’ dla dowolnego takiego stringa.

Użyłeś form_tag?

tak, próbowałem dokładnie tak jak proponował Vayneyks.

[quote=Vayneyks]Proszę :slight_smile: Już Ci tłumaczę:

Formularz z wyszukiwaniem jest ustawiony na search_path ( = form_tag search_path). W takim wypadku wszystko co wpiszesz tutaj i wyślesz idzie do kontrolera search. Jeżeli chcesz, by szło do root (tak jak w url który podajesz), musisz zmienić form_tag na:

= form_tag root_path

i tym razem zrobić wyszukiwanie w kontrolerze roota, nie search, czyli

[code]class HomeController < ApplicationController

def index
@objects = Object.search(params[:search])
end

end[/code]
pozdrawiam[/quote]
Czyli w skrócie wpisanie czegoś w to pole tekstowe (nieważne gdzie ono się w danym momencie znajduje) i wciśnięcie search, powinno spowodować przejście do wyników wyszukiwania tak?
U mnie zaś odświeża obecnie otwartą stronę wstawiając w adres parametry (tak jak pisałem wyżej).
Ten URL z root’em jest właśnie czymś niepożądanym:P

Jeżeli formularz pola wyszukiwania jest ustawiony na search_path, to wyszukiwanie jest w search controller, jeżeli na root_path to parametry idą do kontrolera przypisanego do root (a tam możesz je sobie obsłużyć).

xD masakra ale błąd w moim przypadku nie leżał po stronie ruby xD
miejsce w szablonie w które wstawiałem search box’a było opatrzony w i to sprawiało że formularz nie działał nigdzie poza home/search .

tak czy siak, dzięki za pomoc i oczywiście twoja wersja Vayneyks jest jak najbardziej prawidłowa.

Pozdrawiam!