Посмотреть результаты поиска в индексе - PullRequest
0 голосов
/ 25 сентября 2018

То, чего я пытаюсь достичь, это страница индекса продукта, которая показывает:

(1) результат моего поиска, если он соответствует записи в моей базе данных,

(2)все мои продукты, если пользовательский ввод пуст (или я просто захожу на страницу / products), и

(3) сообщение о том, что продукт не был найден, если продукт не существует (нет в базе).

Приведенный ниже код возвращает мне все продукты, если я вставляю пробел в поле поиска или вставляю строку, которая не соответствует какой-либо записи в базе данных, и правильный продукт, если он найден вбаза данных.

<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>

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

С помощью этого кода я наконец-то достиг того, что пытался сделать.

<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>
0 голосов
/ 25 сентября 2018

(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>
...