我正在使用postgresql全文搜索。我已经成功地实现了一切。我只是有点小麻烦的小if和其他声明。如果没有查询匹配,我想显示一条消息,“没有找到结果”。分别给出了模型、视图和控制器代码。
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和and语句。但是,我不知道如何使用postgresql全文。我在控制器上也试过这个,但没有起作用。我已经尝试过如果params:search.present,但这不是正确的方法。这看起来很简单,但我已经为此挣扎了一段时间。任何帮助都将不胜感激,谢谢!
发布于 2016-03-13 10:52:24
您可以在视图中添加一个条件来检查@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 %>
或签入控制器,如果你想通过闪光灯显示一条消息。控制器
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
https://stackoverflow.com/questions/35974178
复制