【问题标题】:Need to recognize how many items a search returns需要识别搜索返回的项目数量
【发布时间】:2012-06-15 10:09:53
【问题描述】:

我在数据输入之前实施搜索,以确保用户没有重复现有条目,但我无法确定如何捕获和使用搜索结果的数量来引导用户进行下一步。

我正在使用 rails 3 和 pg_search gem

models/request.rb

class Request < ActiveRecord::Base
  attr_accessible :description, :title, :user_id, :who

  belongs_to :user
  has_many :comments

  include PgSearch
  pg_search_scope :search, against: [:title, :description, :who],
     using: {tsearch: {dictionary: "english"}},
       associated_against: {user: :name},
       ignoring: :accents

  def self.request_search(query)
    if query.present?
      search(query)
      where("title @@ :q or description @@ :q or who @@ :q", q: query)
    else
      scoped
    end
  end
end

requests_controller.rb

  def index
    @requests = Request.request_search(params[:search]).order(sort_column + " " +  sort_direction).paginate(:per_page => 4, :page => params[:page])
    @users = User.all
  end

-- 开始编辑(根据 Jesse 的回答)

requests_controller.rb(续)

  private

  def sort_column
    Request.column_names.include?(params[:sort]) ? params[:sort] : "title"
  end

  def sort_direction
    %w[asc desc].include?(params[:direction]) ? params[:direction] : "asc"
  end

application_helper.rb

  def sortable(column, title = nil)
    title ||= column.titleize
    css_class = column == sort_column ? "current #{sort_direction}" : nil
    direction = column == sort_column && sort_direction == "asc" ? "desc" : "asc"
    link_to title, params.merge(:sort => column, :direction => direction, :page => nil), {:class => css_class}
  end

_requests.html.erb(部分)

<%= hidden_field_tag :direction, params[:direction] %>
<%= hidden_field_tag :sort, params[:sort] %>

<div class="row">
    <table class="table table-striped pretty">
       <thead>
          <tr>
            <th><%= sortable "title" %></th>
            <th><%= sortable "who", "Requested Pro" %></th>
            <th><%= sortable "created_at", "When" %></th>
            <th><%= sortable "request.user", "Requested by" %></th>
          </tr>
       </thead>
       <tbody>
       <% @requests.each do |request| %>
         <tr>
           <td><%= request.title %></td>
           <td><%= request.who %></td>
           <td><%= request.created_at %></td>
           <td><%= request.user.name %></td>
           <td><%= link_to 'Show', request, :class => 'btn btn-mini'%></td>
           <% if can? :update, @course %>
           <td><%= link_to 'Edit', edit_request_path(request) %></td>
               <td><%= link_to 'Destroy', request, 
                            confirm: 'Are you sure?', 
                            method: :delete, 
                            :class => 'btn btn-mini' %></td>
           <% end %>
         </tr>
      <% end %>
      </tbody>
    </table>
    <div class="pull-right"><%= will_paginate @requests %></div>    
</div>
<%= button_to 'New Request', new_request_path, :class => 'btn btn-large btn-primary mleft20 mtop20' %>

-- 结束编辑

例如,有两种方法可以从其他页面到达索引页面,搜索后或通过链接。如果用户在搜索后到达索引,我想在视图中的搜索结果之前插入一些文本:您的搜索产生了“x”项。如果您没有看到您要查找的内容,请单击按钮输入新请求。

否则,如果用户只是链接到索引,我希望能够隐藏文本并按原样显示索引。

我想我可以通过 request_search 以某种方式访问​​搜索属性(如果这样称呼它们是正确的),但我不确定如何在视图中实现它(经过多次尝试)。

其次,如果我可以添加,如果用户决定创建一个新条目,我希望将搜索文本复制到其中一个条目字段中......

请让我知道我是否已经清楚地说明了问题,并且您是否可以为我提供一些启示。提前致谢。

【问题讨论】:

    标签: ruby-on-rails search pg-search


    【解决方案1】:
      def index
        @requests = Request.request_search(params[:search]).order(sort_column + " " +  sort_direction).paginate(:per_page => 4, :page => params[:page])
        @users = User.all
        @search = params[:search] 
     end
    

    在你看来:

    <% if @search.present? %> 
      <p>Your search yielded <%= pluralize(@requests.total_entries, "item") %>. If you don't see what you're looking for, enter a new request by clicking on the button.</p>
    <% end %>
    
    <%= form_tag, url: "/" do %>
      <%= label_tag :search, "Search for:"%>
      <%= text_field_tag :search, value: @search %>
      <%= submit_tag "Search" %>
    <% end %>
    

    最后说明:看起来您一定遗漏了获取“sort_column”的代码。由于“sort_column”将是一个未引用的变量,因此您将无法运行上述代码。

    【讨论】:

    • (我假设你在这里使用 will_paginate 进行分页)
    • 嘿,杰西。感谢您的及时回复。根据您的建议编辑问题以在视图中包含相关的排序方法和 will_paginate。
    • 当用户通过搜索到达该页面时,您的回答效果很好(并且足以让我了解剩下的路)。仍在研究当用户通过链接到达时会发生什么。现在,您的解决方案在通过链接到达时返回零个项目,因为没有搜索参数,即没有搜索。很确定我可以通过路由到不同的登录页面并使用相同的部分来处理第二种情况。在我能够解决后将发布。再次感谢。
    • 为了四舍五入,我使用条件语句来确定用户是通过搜索还是通过链接到达索引: 和 。我还在考虑添加第三个条件 ,如果用户到达页面并且没有找到项目,这意味着搜索将存在,但 total_entries 将为零。我希望这可以帮助其他人。 B
    猜你喜欢
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 2023-04-10
    • 2013-06-13
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    相关资源
    最近更新 更多