Форма поиска в навигационной панели ничего не отображает - PullRequest
0 голосов
/ 09 января 2019

У меня есть форма поиска в моей навигационной панели

  <%= simple_form_for :query, url: clients_products_path, method: :get,  wrapper: :inline_form, html: {class: 'form-inline'} do |f| %>
    <%= f.input  :keyword, placeholder: "Recherche" %>
    <%= f.submit "Valider" %>
  <% end %>

В моем product_controller.rb

class Clients::ProductsController < ApplicationController


def index
  filter_products if params[:query].present?
  @products ||= Product.all
end

private

def filter_products
  return if params[:query].blank?
  @products = Product.where('lower(title) LIKE ?', params[:query][:keyword]) if params[:query][:keyword].present?
end

конец

Мой запрос кажется правильным, так как я могу найти продукт в консоли rails. но он ничего не отображает в индексе продукта ... Где я не прав?

обновление

Все продукты хорошо отображаются, и все исчезает, когда я делаю запрос Клиенты / Продукты / index.html.erb

<% @products.each do |product| %>
    <%= link_to clients_product_path(product) do  %>
        <%= image_tag(product.attachments.first.url) %>
        <%= product.title %>
        <%= product.price %>
    <% end %>
<% end %>

вот результат

http://localhost:3000/clients/products?utf8=%E2%9C%93&query%5Bkeyword%5D=jean&commit=Valider

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Прежде всего вы проверяете params[:query] дважды (один раз при вызове filter_products и второй раз в этой функции)

И с вами что-то не так filter_products функция.

Когда вы делаете @products ||= Product.all, вы получаете пустое значение ActiveRecordRelation, если запрос возвращает пустое отношение. Другими словами, @products всегда будет пустым, если query[:keyword] не соответствует title.

Попробуйте изменить свою индексную функцию на:

def index
  @products = Product.where('lower(title) LIKE %?%', params[:query][:keyword].downcase) if params[:query][:keyword].present?
  puts @products
  @products ||= Product.all
end

Если он все еще возвращает пустое значение, попробуйте напечатать переменную @products.

0 голосов
/ 09 января 2019

Я полагаю, что ваша проблема лежит здесь:

@products = Product.where('lower(title) LIKE ?', params[:query][:keyword])

Вам нужно либо добавить, либо дополнить, либо обернуть запрос с помощью %. Например:

@products = Product.where('lower(title) LIKE ?', "%#{params[:query][:keyword]}%")
# Think it's the above, though could be the following:
# @products = Product.where('lower(title) LIKE "%?%"', params[:query][:keyword])

Если у вас есть оператор SQL 100 * * для чтения, % работает как символ подстановки. Без них вы ищете точное совпадение, а не фразу, содержащуюся в заголовке. Документы здесь .

Сделайте это и дайте мне знать, как вы поживаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...