路由轨道简单搜索到列表页面

时间:2015-11-03 20:26:25

标签: ruby-on-rails

我实现了一个简单的rails搜索,它搜索我的数据库并显示结果就好了。但是,我并不完全了解如何将搜索查询路由到新页面。

我使用rails scaffolding来创建我网站的这个特定部分:

class DogSearchesController < ApplicationController
  before_action :set_dog_search, only: [:show, :edit, :update, :destroy]

  # GET /dog_searches
  # GET /dog_searches.json
  def index
    @dog_searches = DogSearch.where(["dog LIKE ? ","%#{params[:search]}%"])
  end

  # GET /dog_searches/1
  # GET /dog_searches/1.json
  def show
    @dog_search = DogSearch.find(params[:city])
  end

index.html.rb

  <%= form_tag dog_searches_path, :method => 'get', :class => 'search-form' do %>
    <i class="fa fa-map-marker"></i>
    <%= text_field_tag :search, params[:search], :class => 'homesearch', :placeholder => 'Enter search term' %>
    <%= my_button_to '<i class="fa fa-search"></i>', {}, :class => "fa fa-search" %>
  <% end %>

我已在dog_searches/listing中创建了一个页面,并将其添加到我的路径文件get 'dog_searches/listing'

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

通常,搜索结果将转到带有参数的索引页面。如果您想要显示dog_searches,过滤或分页的列表,那么这是使用索引操作和查看所有这些内容的常用方法。

但是,如果你想渲染列表页面,你可能想要将表单设置为该页面

# routes.rb

resources :dog_searches do
  get :listing, :on => :collection
end

在视图中 - 请注意网址更改

  <%= form_tag listing_dog_searches_path, :method => 'get', :class => 'search-form' do %>
    <i class="fa fa-map-marker"></i>
    <%= text_field_tag :search, params[:search], :class => 'homesearch', :placeholder => 'Enter search term' %>
    <%= my_button_to '<i class="fa fa-search"></i>', {}, :class => "fa fa-search" %>
  <% end %>

然后在控制器中,你有一个非常类似的索引动作。

def listing
  @dog_searches = DogSearch.where(["dog LIKE ? ","%#{params[:search]}%"])
end

但是,再一次,索引可以为你处理所有这些吗?

答案 1 :(得分:0)

您的表单所在的目录是什么,以及您希望将搜索queryresult发送到哪个新页面?

默认情况下,rails使用与控制器操作相同的名称呈现文件。

因此,如果执行搜索的控制器操作是index中的DogSearchesController操作,则视图文件为dog_searches/index.html.erb

另一方面,如果您希望视图为dog_searches/listing.html.erb,那么您可能需要在listing中创建DogSearchesController操作,并将搜索内容移动到其中,如下所示:

def listing
  @dog_searches = DogSearch.where(["dog LIKE ? ","%#{params[:search]}%"])
end

并让您的搜索表单指向此操作:

  <%= form_tag listing_dog_searches_path, :method => 'get', :class => 'search-form' do %>
    <i class="fa fa-map-marker"></i>
    <%= text_field_tag :search, params[:search], :class => 'homesearch', :placeholder => 'Enter search term' %>
    <%= my_button_to '<i class="fa fa-search"></i>', {}, :class => "fa fa-search" %>
  <% end %>

请注意,我假设listing操作的路径是listing_dog_searches_path

希望这能为它注入一些亮光吗?