繁体   English   中英

如果在Postgresql全文搜索中未找到结果,则显示一条消息

[英]Displaying a message if no results were found in postgresql full text search

我正在使用PostgreSQL全文搜索。 我已经成功实现了一切。 我只是通过小的if和else声明而遇到小麻烦。 如果没有匹配的查询,我想显示一条消息“找不到结果”。 型号,视图和控制器代码分别在下面给出。

Model
    include PgSearch
      pg_search_scope :search_by_scoreboard, 
                        :against => [:name_of_scoreboard, :name_of_organization, :name_of_activity],
                        :using => {
                            :tsearch => {
                                tsvector_column: "tsv",
                                :prefix => true,
                                :dictionary => "english",
                                :any_word => true
                            }

                        }

View

    <div id="search">
    <%= form_tag search_path, :method => 'get' do %>
      <%= text_field_tag :search, params[:search], placeholder: "search scorecliq!" %>
      <div id="searchbutton">
      <%= submit_tag "Search", :name => nil %>
      </div>
    <% end %>
    <div>

    <% if params[:search].present? %>

    <% @scoreboard_search.each do |scoreboard_search| %>
        <%= div_for scoreboard_search, :class => "inner-disp" do %> 
            Scoreboard: <%= link_to "#{scoreboard_search.name_of_scoreboard}", scoreboard_path(scoreboard_search.id) %><br>
            Organization: <%= scoreboard_search.name_of_organization %><br>
            Activity: <%= scoreboard_search.name_of_activity %><br>
            state: <%= scoreboard_search.states %><br>
            Admin: <%= link_to "#{image_tag scoreboard_search.user.picture}", user_path(scoreboard_search.user.id)  %>
            picture: <%# image_tag scoreboard_search.user.picture %>
        <% end %>
    <% end %>

    <%= will_paginate @scoreboard_search, :page_links => true %>


    <% end %>

controller

    def index
        @scoreboard_search = Scoreboard.search_by_scoreboard(params[:search]).paginate(:page => params[:page], :per_page => 5)
    end 

如果这是一个简单的查询,则可以在模型中编写if和else语句。 但是,我不确定如何使用postgresql全文。 我也在控制器中尝试过,但是没有用。 我已经尝试过params [:search] .present,但是那不是正确的方法。 看起来很简单,但是我已经为此苦苦挣扎了一段时间。 任何帮助将不胜感激,谢谢!

您可以在视图中放置一个条件,以检查@scoreboard_search是否包含结果。

 <% if params[:search].present? %>
       <% if @scoreboard_search.present? %>
            <% @scoreboard_search.each do |scoreboard_search| %>
                <%= div_for scoreboard_search, :class => "inner-disp" do %> 
                    Scoreboard: <%= link_to "#{scoreboard_search.name_of_scoreboard}", scoreboard_path(scoreboard_search.id) %><br>
                    Organization: <%= scoreboard_search.name_of_organization %><br>
                    Activity: <%= scoreboard_search.name_of_activity %><br>
                    state: <%= scoreboard_search.states %><br>
                    Admin: <%= link_to "#{image_tag scoreboard_search.user.picture}", user_path(scoreboard_search.user.id)  %>
                    picture: <%# image_tag scoreboard_search.user.picture %>
                <% end %>
            <% end %>

            <%= will_paginate @scoreboard_search, :page_links => true %>

        <% else %>
          No result found
        <% end %>
    <% end %>

或检查控制器是否要通过Flash显示消息。 控制者

   def index
        @scoreboard_search = Scoreboard.search_by_scoreboard(params[:search]).paginate(:page => params[:page], :per_page => 5)

        or you can show a flash message 
        flash[:notice] = "No result found" if @scoreboard_search.nil? || @scoreboard_search.blank?
    end 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM