【发布时间】:2016-02-10 11:03:13
【问题描述】:
我正在尝试创建一个搜索表单,该表单可以根据用户对餐厅名称的查询来检索结果。到目前为止,我已经设置了它的路由、控制器和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 %>
以下是设置搜索的方式:
layouts/_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
其次,我在索引页面上获取了我的数据库中的每家餐厅(如预期的那样)。有没有一种方法可以让页面在搜索请求之外的任何内容都是空白的?
【问题讨论】:
-
当您输入
localhost:3000/search时,它会点击您的search/index.html.erb页面吗?localhost:3000/restaurant与您的问题有什么关系? -
是的。我也会在我的帖子中提到这一点,但如果我在
localhost:3000/search并输入我的查询,它将获取结果。但如果我在localhost:3000/restaurants或/search以外的页面上,我会将其添加到我的网址末尾而不是搜索:utf8=✓&query=pizza -
1) 您是否尝试过使用
form_tag而不是form_for2) 在else代码路径中:@restaurants = []而不是@restaurants = Restaurant.all -
@markets 哇...我觉得我搜索了整个互联网并做了除了这两个建议之外的所有事情。感觉将其发布为答案,我会将其标记为正确。谢谢!
标签: ruby-on-rails forms search controller