查看索引中的搜索结果
View results of a search in index
我想要实现的是一个产品索引页面,其中显示:
(1) 我的搜索结果,如果它与我的数据库中的记录匹配,
(2) 如果用户输入为空(或者如果我只是访问 /products 页面),我的所有产品,并且
(3) 如果产品不存在(不在数据库中),则显示未找到该产品的消息。
下面的代码 returns 如果我在搜索字段中插入一个空白 space 或者如果我插入一个与数据库中的任何记录都不匹配的字符串,并且如果在数据库中找到了正确的产品。
<div class="container">
<div class="row">
<% if @products_search.present? %>
<% @products_search.each do |product| %>
<div class="col-sm-8 col-sm-offset-2">
<%= product.name %><br>
<%= product.description %><br>
<%= humanized_money_with_symbol(product.price)%><br>
<%= link_to "Show Product", product_path(product) %>
</div>
<% end %>
<% elsif @products_search.blank? %>
<% @products.each do |product| %>
<div class="col-sm-8 col-sm-offset-2">
<%= product.name %><br>
<%= product.description %><br>
<%= humanized_money_with_symbol(product.price)%><br>
<%= link_to "Show Product", product_path(product) %>
</div>
<% end %>
<% else %>
<h1>No products found!</h1>
<% end %>
</div>
</div>
class ProductsController < ApplicationController
def index
@products_search = Product.search_by_name_and_description(params[:term])
@products = Product.all
end
end
class Product < ApplicationRecord
has_and_belongs_to_many :orders
belongs_to :category
belongs_to :user
monetize :price_cents
include PgSearch
pg_search_scope :search_by_name_and_description,
against: [ :name, :description ],
associated_against: {
category: [ :name ]
},
using: {
tsearch: { prefix: true }
}
end
<%= form_tag products_path, method: :get do %>
<%= text_field_tag 'term', params[:term], placeholder: "What are you looking for?", :required => true %>
<%= submit_tag 'Search!' %>
<% end %>
<br>
(1) 如果与我的数据库中的记录匹配,则为我的搜索结果,
(2) 如果用户输入为空(或者如果我只是访问 /products 页面),我的所有产品,并且
(3) 如果产品不存在(不在数据库中),则显示未找到该产品的消息。
<div class="container">
<div class="row">
<% if @products_search.blank? %>
<%unless @products.blank?%>
<% @products.each do |product| %>
<div class="col-sm-8 col-sm-offset-2">
<%= product.name %><br>
<%= product.description %><br>
<%= humanized_money_with_symbol(product.price)%><br>
<%= link_to "Show Product", product_path(product) %>
</div>
<%end%>
<%else%>
<h1>No products found!</h1>
<%end%>
<% elsif @products_search.present? %>
<% @products_search.each do |product| %>
<div class="col-sm-8 col-sm-offset-2">
<%= product.name %><br>
<%= product.description %><br>
<%= humanized_money_with_symbol(product.price)%><br>
<%= link_to "Show Product", product_path(product) %>
</div>
<%end%>
<% else %>
<h1>No products found!</h1>
<% end %>
</div>
</div>
有了这段代码,我终于实现了我想要做的事情。
<div class="container">
<div class="row">
<% if params[:term].present? %>
<% if @products_search.present? %>
<% @products_search.each do |product| %>
<div class="col-sm-8 col-sm-offset-2">
<%= product.name %><br>
<%= product.description %><br>
<%= humanized_money_with_symbol(product.price)%><br>
<%= link_to "Show Product", product_path(product) %>
</div>
<%end%>
<% else %>
<h1>No products found!</h1>
<%end%>
<% else %>
<% @products.each do |product| %>
<div class="col-sm-8 col-sm-offset-2">
<%= product.name %><br>
<%= product.description %><br>
<%= humanized_money_with_symbol(product.price)%><br>
<%= link_to "Show Product", product_path(product) %>
</div>
<%end%>
<%end%>
</div>
</div>
我想要实现的是一个产品索引页面,其中显示:
(1) 我的搜索结果,如果它与我的数据库中的记录匹配,
(2) 如果用户输入为空(或者如果我只是访问 /products 页面),我的所有产品,并且
(3) 如果产品不存在(不在数据库中),则显示未找到该产品的消息。
下面的代码 returns 如果我在搜索字段中插入一个空白 space 或者如果我插入一个与数据库中的任何记录都不匹配的字符串,并且如果在数据库中找到了正确的产品。
<div class="container">
<div class="row">
<% if @products_search.present? %>
<% @products_search.each do |product| %>
<div class="col-sm-8 col-sm-offset-2">
<%= product.name %><br>
<%= product.description %><br>
<%= humanized_money_with_symbol(product.price)%><br>
<%= link_to "Show Product", product_path(product) %>
</div>
<% end %>
<% elsif @products_search.blank? %>
<% @products.each do |product| %>
<div class="col-sm-8 col-sm-offset-2">
<%= product.name %><br>
<%= product.description %><br>
<%= humanized_money_with_symbol(product.price)%><br>
<%= link_to "Show Product", product_path(product) %>
</div>
<% end %>
<% else %>
<h1>No products found!</h1>
<% end %>
</div>
</div>
class ProductsController < ApplicationController
def index
@products_search = Product.search_by_name_and_description(params[:term])
@products = Product.all
end
end
class Product < ApplicationRecord
has_and_belongs_to_many :orders
belongs_to :category
belongs_to :user
monetize :price_cents
include PgSearch
pg_search_scope :search_by_name_and_description,
against: [ :name, :description ],
associated_against: {
category: [ :name ]
},
using: {
tsearch: { prefix: true }
}
end
<%= form_tag products_path, method: :get do %>
<%= text_field_tag 'term', params[:term], placeholder: "What are you looking for?", :required => true %>
<%= submit_tag 'Search!' %>
<% end %>
<br>
(1) 如果与我的数据库中的记录匹配,则为我的搜索结果,
(2) 如果用户输入为空(或者如果我只是访问 /products 页面),我的所有产品,并且
(3) 如果产品不存在(不在数据库中),则显示未找到该产品的消息。
<div class="container">
<div class="row">
<% if @products_search.blank? %>
<%unless @products.blank?%>
<% @products.each do |product| %>
<div class="col-sm-8 col-sm-offset-2">
<%= product.name %><br>
<%= product.description %><br>
<%= humanized_money_with_symbol(product.price)%><br>
<%= link_to "Show Product", product_path(product) %>
</div>
<%end%>
<%else%>
<h1>No products found!</h1>
<%end%>
<% elsif @products_search.present? %>
<% @products_search.each do |product| %>
<div class="col-sm-8 col-sm-offset-2">
<%= product.name %><br>
<%= product.description %><br>
<%= humanized_money_with_symbol(product.price)%><br>
<%= link_to "Show Product", product_path(product) %>
</div>
<%end%>
<% else %>
<h1>No products found!</h1>
<% end %>
</div>
</div>
有了这段代码,我终于实现了我想要做的事情。
<div class="container">
<div class="row">
<% if params[:term].present? %>
<% if @products_search.present? %>
<% @products_search.each do |product| %>
<div class="col-sm-8 col-sm-offset-2">
<%= product.name %><br>
<%= product.description %><br>
<%= humanized_money_with_symbol(product.price)%><br>
<%= link_to "Show Product", product_path(product) %>
</div>
<%end%>
<% else %>
<h1>No products found!</h1>
<%end%>
<% else %>
<% @products.each do |product| %>
<div class="col-sm-8 col-sm-offset-2">
<%= product.name %><br>
<%= product.description %><br>
<%= humanized_money_with_symbol(product.price)%><br>
<%= link_to "Show Product", product_path(product) %>
</div>
<%end%>
<%end%>
</div>
</div>