我正在尝试创建一个搜索表单,根据用户对餐馆名称的查询来检索结果。到目前为止,我已经设置了它的路由,控制器和index
视图。
的routes.rb
resources :search, :only => [:index]
search_controller.rb
class SearchController < ApplicationController
def index
if params[:query].present?
@restaurants = Restaurant.search(params[:query])
else
@restaurants = Restaurant.all
end
end
end
搜索/ index.html.erb
<% @restaurants.each do |restaurant| %>
<%= restaurant.name %>
<% end %>
以下是设置搜索的方式:
布局/ _header.html.erb
<%= form_for search_index_path, method: :get do |f| %>
<%= text_field_tag :query, params[:query] %>
<%= submit_tag "Search", name: nil %>
<% end %>
现在我遇到了两个问题。第一个是如果我输入查询并提交,则页面不会进入索引页面。它只是将查询附加到我当前的页面上:
localhot:3000/restaurant?utf8=✓&query=pizza
其次是我在索引页面上获取我的数据库中的每个餐馆(正如预期的那样)。有没有办法让我可以将页面空白除了搜索请求以外的其他内容?
答案 0 :(得分:0)
问题1
使用form_tag
代替form_for
,因为后者用于处理特定的模型对象,但事实并非如此。
问题2
您可以通过以下方式实现这一目标:
if params[:query].present?
@restaurants = Restaurant.search(params[:query])
else
@restaurants = [] # or Restaurant.none if you need a chainable scope
end