【发布时间】:2013-08-16 10:49:28
【问题描述】:
我有一个显示在所有页面上的搜索表单,因为我希望某人能够搜索并被重定向到搜索结果,而不管他们在网站的哪个位置。为了实现这一点,我将表单放在我包含在应用程序布局中的部分中。看起来是这样的
<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?
【问题讨论】:
-
“不能在其他地方工作”是什么意思?你有错误吗?这是什么错误?
-
它不显示结果但似乎重定向。
-
您没有显示您的视图,但我怀疑未设置值
params[:querey]或params[:page]之一。你检查了吗? -
你应该在
index action中做的是这个render js: "window.location = '#{search_path}'",因为它可能无法将流扔到那个特定的url,所以你可以像这样强制它。它不是一个确定的解决方案,但值得一试。 -
为什么
form里面有一个form?
标签: ruby-on-rails search ruby-on-rails-3.2