我正在尝试使用Bootstrap的Navbar Search组件在我的导航栏中进行快速关键字搜索。目前,这是使用form_tag,如下所示
<form class="navbar-search pull-left">
<%= form_tag(recipes_path, :method => :get) do %>
<%= text_field_tag :keywords, nil,
{:class => "search-query", :placeholder => "recipes quick search"} %>
<%= hidden_field_tag :use_keywords, "true" %>
<%= hidden_field_tag :wide_search, "true" %>
<% end %>
</form>
这是用于配方查找。我正在使用表单来(尝试)获取关键字,这些关键字将作为参数传递给搜索,它位于食谱索引操作中。
def index
if params[:wide_search].present?
@search = Search.new
@search.use_keywords = params[:use_keywords]
@search.keywords = params[:keywords]
... (more params for other search types)
if params[:wide_search] == "true"
@recipes = @search.wide_search
elsif params[:wide_search] == "false"
@recipes = @search.narrow_search
end
@recipes = @recipes.paginate(:page => params[:page])
else # no params, just index all
@recipes = Recipe.paginate(:page => params[:page])
end
end
请注意,“搜索”是一个ruby类。我正在考虑将它变成一个完整的资源,这样我就可以创建和查看旧的搜索(也许可以根据过去的历史来查看它们提供建议的搜索等),但我决定反对它。我还是不知道这是不是一个好主意。如果它是一个实际的资源,它可以有RESTful动作,也许可以节省一些问题。这不是我的实际问题,但有人对此提出了建议吗?
抱歉,回到实际问题 - 从根页面或任何地方,我希望能够输入关键字,按回车键(在搜索栏内)并将其重定向到配方索引需要params,以便它可以运行搜索并显示结果。
现在,如果我转到索引页面并执行此操作,它可以正常工作。但是,如果我在任何其他页面(如根页面或任何地方)并尝试键入关键字并按Enter键,它只会重新加载当前页面,尽管我确实在URL中看到了参数。因此它不会重定向到食谱索引。我一定错过了什么,但我不确定是什么。我对form_tag有点怀疑,因为没有实际的提交按钮。但是当我进入索引页面时它会起作用,所以我不知道。任何建议表示赞赏!