Отличный вопрос! Чтобы ответить на ваш вопрос, вы можете создать частный метод с redirect_to другой страницей (которая имеет ‹%=render 'results' %>), если параметры поиска передаются в ваш HomeController.
class HomeController < ApplicationController
before_action :search
def index
@search = User.search(params[:q])
@users = @search.result
end
private
def search
if params[:q]
search_params = CGI::escapeHTML(params[:q])
redirect_to (url --> see below how to get the url)
end
end
end
Однако, если вы хотите приступить к созданию своего приложения, вы хотите, чтобы результаты поиска отображались на этой специальной странице, независимо от того, где вы находитесь в приложении. Я вставляю полный ответ из небольшого приложения rails. Код немного отличается (form_tag вместо search_form_for), но я знаю, что он работает, так что, надеюсь, он вам поможет.
Ниже приведена часть панели навигации, которая отображается в приложении, а затем соответствующий код для домашней страницы и действия индекса ListingController. Если переданы параметры поиска, то index.html.erb отображает частичный @listings (_listing.html.erb) и ничего ниже тега ‹% else %> на главной странице.
_navigation.html.erb
<%= form_tag search_path, :method => :get do %>
<div class="form-group">
<%= text_field_tag :search, params[:search], class: "form-control", placeholder: "Search" %>
</div>
<%= submit_tag "Submit", :name => nil, :class => "btn btn-primary" %>
<% end %>
index.html.erb
<% if params[:search] %>
<h2>Search Results</h2>
<%= render @listings %>
<% else %>
...what usually shows up on my home page with no search results.
<% end %>
listings_controller
def index
@listings = Listing.search(params[:search])
end
маршруты.rb
get 'search' => "listings#search"
Это прекрасно работает. Однако, если я нахожусь в другом представлении/контроллере, например, в том, который показывает все категории, и пытаюсь выполнить поиск, то он в основном ищет текущую страницу. Итак, я добавил в контроллер категорий следующее:
Categories_controller
before_action :search
......
private
def search
if params[:search]
search_params = CGI::escapeHTML(params[:search])
redirect_to ("/listings?utf8=%E2%9C%93&search=#{search_params}")
end
end
НО, для вашего конкретного приложения, чтобы поиск перенаправлялся на домашнюю страницу и отображались результаты поиска, сначала выполните поиск на своей домашней странице и посмотрите, что генерируется в URL-адресе. Допустим, я набрал «сыр» (/listings?utf8=%E2%9C%93&search=сыр). Обратите внимание на %E2%9C%93... вы можете не видеть это, потому что это обычно отображается как проверка в URL-адресе вашего браузера (http://unicode-search.net/unicode-namesearch.pl?term=mark)...so просто вставьте его в текстовый обработчик или текстовая область stackoverflow, чтобы получить «полный URL-адрес», как указано выше. Затем в конце URL-адреса просто замените то, что вы ввели в поле поиска, на #{search_params}.
Это передает все, что было введено в поле поиска, на вашу специальную страницу результатов поиска (в моем случае index.html.erb)!
Вот некоторая документация по CGI escapeHTML (из соображений безопасности): http://ruby-doc.org/stdlib-2.0/libdoc/cgi/rdoc/CGI.html#method-c-escapeHTML
person
snewcomer
schedule
10.01.2015