偉大的問題!要回答你的問題,你可以創建一個帶有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
的routes.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
但是,對於特定的應用程序,以獲得搜索重定向到主頁並顯示搜索結果,第一個做搜索在您的主頁上查看網址中生成的內容。假設我輸入'cheese'(/ listing?utf8 =%E2%9C%93 & search = cheese)。注意%E2%9C%93 ...你可能看不到這個b/c,這通常顯示爲你的瀏覽器中的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