【问题标题】:Routing rails Simple Search to a listings page将 Rails 简单搜索路由到列表页面
【发布时间】:2015-11-04 05:10:03
【问题描述】:

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

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

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'

任何帮助将不胜感激。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    通常情况下,搜索结果会带参数进入索引页面。如果您想显示 dog_searches、过滤或分页的列表,这是使用 index 操作和查看所有这些的常用方法。

    但是,也就是说,如果您想呈现列表页面,您可能需要将表单设置为该页面

    # 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
    

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

    【讨论】:

    • 这很棒而且效果很好。如果这是常见的做法,我想我会考虑使用索引,因为偏离是没有意义的。运行搜索时,页面设计会有所不同,这就是我将列表与索引分开查看的原因。仍在学习使用 Rails 进行路由的过程,这确实让我感到困惑。
    • 有时您需要不同的视图来获得相同的结果 - 例如,通常有一个 csv 或 excel 版本的索引页面。我可以看到其他用途。您可以将两个页面都视为列表 - 只需通过更改操作并单独保留其他参数来链接到另一个页面 - 即在其呈现后来自索引页面的link_to(params.merge(:action =&gt; :listing))。最后,如果需要,您可以从索引页面重定向到列表页面。该选项不是很常见。相反,您可能希望有一个“search_form”页面并提交到索引。
    【解决方案2】:

    您的表单所在的目录是什么,您要将搜索queryresult 路由到哪个新页面?

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

    因此,如果进行搜索的控制器动作是DogSearchesController 中的index 动作,那么视图文件就是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

    希望这能给它一些启示?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      相关资源
      最近更新 更多