2015-11-03 60 views
0

我已经实现了一个简单的导轨搜索,它正在搜索我的数据库并显示结果很好。但是,我不完全了解如何将我的搜索查询路由到新页面。路由导轨简单搜索到列表页面

我已经用护栏脚手架创建我的网站的这一特定部分:

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'

任何帮助,将不胜感激。

回答

0

通常情况下,搜索结果将通过参数进入索引页面。如果您想要显示过滤或分页的dog_searches列表,那么对所有这些使用索引操作和视图是一种常见的方法。

但是,这么说,如果你想渲染列表页面,你可能需要将表格设置为页面

# routes.rb 

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

在视图 - 注意URL变化

<%= 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 

但是,可以索引处理所有这些吗?

+0

这很棒,效果很好。如果这是常见做法,我认为我会考虑使用索引,因为它没有意义偏离。当搜索运行时,页面设计将有所不同,这就是为什么我在查看与索引分开的列表。仍在学习使用Rails进行路由的过程,这让我非常困惑。 – JustDanLee

+0

有些时候,您想要获得相同结果的不同视图 - 例如,在索引页面上使用csv或excel版本很常见。我可以看到其他用途。您可以将两个页面视为列表 - 只要链接到另一个页面,方法是在索引页面呈现后,通过更改操作并保留其他参数 - 即link_to(params.merge(:action =>:listing))' 。最后,如果需要,您可以从索引页面重定向到列表页面。该选项并不常见。相反,你可能想要有一个'search_form'页面并提交给索引。 – Swards

0

什么是您的表单所在的目录,以及您希望将您的搜索路径queryresult路由到哪个目录?

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

因此,如果是做搜索控制器动作是在DogSearchesControllerindex动作,然后视图文件是dog_searches/index.html.erb

在另一方面,如果你要认为是dog_searches/listing.html.erb,那么你可能要创建在DogSearchesController一个listing动作和移动搜索里面如下:

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

希望这会抛出一些光?