我有一个显示在所有页面上的搜索表单,因为我希望某人能够搜索并被重定向到搜索结果,无论他们在网站上的什么位置。为了实现这一点,我将表单放在我包含在应用程序布局中的部分中。看起来像这样
<form class="form-search center">
<%=form_tag search_url, method: :get do%>
<%=text_field_tag :query, params[:query] ,{:class=>"input-xxlarge search-query"}%>
<button type="submit" class="btn">Search</button>
<%end%>
</form>
我创建了一个名为 SearchResults 的控制器,其中包含一个索引操作来显示结果。命名路线如下所示
match '/search', to: 'search_results#index'
搜索在搜索页面上工作得很好,但不能在其他任何地方工作。我的索引操作看起来像这样
class SearchResultsController < ApplicationController
def index
@restaurants = Restaurant.text_search(params[:query]).page(params[:page]).per_page(3)
end
end
无论我在应用程序中的哪个位置,我都希望能够在执行搜索时重定向到此操作。 text_search 方法在餐厅模型中定义,如下所示
def self.text_search(query)
if query.present?
where("restaurant_name ilike :q or description ilike :q", q: "%#{query}%")
else
scoped
end
它不起作用,因为当我搜索时没有任何反应,但如果我进入搜索页面,它会返回结果。
我注意到了一些有趣的事情。当我从主页搜索诸如吃之类的术语时。网址看起来像这样localhost:3000/?utf8=✓&query=eats
,当我从完美运行的真实搜索页面搜索时,它看起来像这样localhost:3000/search?utf8=✓&query=eats
。无论从哪里搜索,我怎样才能让它指向后一个 url?