在Rails应用程序中创建站点范围的搜索

时间:2015-11-09 17:58:38

标签: ruby-on-rails forms search controller

我正在尝试创建一个搜索表单,根据用户对餐馆名称的查询来检索结果。到目前为止,我已经设置了它的路由,控制器和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

其次是我在索引页面上获取我的数据库中的每个餐馆(正如预期的那样)。有没有办法让我可以将页面空白除了搜索请求以外的其他内容?

1 个答案:

答案 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