Поиск Ransack на Rails Engine: результатов нет

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

Я использую слегка модифицированную версию о Shoppe Gem. Это двигатель для управления корзиной, продуктами, заказами и т. Д.

Я загрузил его в этот репозиторий: магазинная вилка egallart

Я обновил зависимости shoppe, чтобы они соответствовали текущей основной версии Ransack.


Я запрограммировал форму поиска в макете приложения, в частичном заголовке для поиска в столбце имени базы данных. Когда я пробую какую-нибудь строку, которая, как мне известно, существует, я не получаю никаких результатов в представлении.

Вот соответствующий код моего MVC.

Контроллер приложений

В основном приложении: app/controllers/application_controller.html.erb

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception

  before_filter :set_search

  def set_search
    @q = Shoppe::Product.ransack(params[:q])
    @products = @q.result(distinct: true)
  end

end

Мне нужно это для инициализации @q сайта в целом, потому что я получил частичную форму, которая отображается в заголовке на каждой странице сайта.

Я не уверен, что это правильный способ сделать это.

Контроллер продукта

Расположенный в основном приложении.

class ProductsController < ApplicationController

  def search
    @q = Shoppe::Product.ransack(params[:q])
    @products = @q.result(distinct: true)
  end

end

Модель продукта

Расположенный внутри Shoppe:: Двигатель

Я не касался ничего, связанного с рансаком, в двигателе нет никаких специфических настроек.

Поиск частичное представление

В основном приложении: views/layouts/application.html.erb

<%= render 'layouts/menuhorizontal' %>

И изнутри views/layouts/_menuhorizont.html.erb

<%= render 'products/search' %>

И внутри просмотров / продуктов /_search.html.erb

<%= form_for @q, url: search_products_path, method: :get, html: { id: "searchbox"} do |f| %>
<%= f.search_field :name_cont, html: { class: "search_query form-control", id: "search_query_top" } %>
<%= f.button "#{'<span>Buscar</span>'}".html_safe, class: "btn btn-default button-search", name: "submit_search" %>
<% end %>

Просмотр результатов поиска

просмотров / продукция / search.html.erb

<% @products.each do |p| %>
<%= p.name %>
<% end %>

Routes.rb в основном приложении.

В config/rout.Rb я установил:

resources :products do
  collection do
    get 'search'
  end
end

Routes.rb в Шоппе:: Двигатель.

В config/rout.Rb я ничего не трогал. Это то, что показано в Shoppe:: Engine vanilla версии, связанные с: продукты:

resources :products do
  resources :variants
  resources :localisations, controller: "product_localisations"
  collection do
    get :import
    post :import
  end
  member do
    get :clone
  end
end

Самое главное это:

Когда я пытаюсь выполнить поиск в консоли rails, я также не получаю никаких результатов. Такое поведение кажется мне странным и теряет меня.

Вот что я получаю в консоли:

[2] pry(main)> Shoppe::Product.ransackable_attributes
=> ["id",
"parent_id",
"name",
"sku",
"permalink",
"description",
"short_description",
"active",
"weight",
"price",
"cost_price",
"tax_rate_id",
"created_at",
"updated_at",
"featured",
"in_the_box",
"stock_control",
"default",
"ean",
"price_on_web",
"length",
"width",
"height",
"moq"]

[4] pry(main)> Shoppe::Product.ransack(name_cont: 'Acople')
=> Ransack::Search<class: Shoppe::Product, base: Grouping
<conditions: [Condition <attributes: ["name"], predicate: cont, 
values:     ["Acople"]>], combinator: and>>

ПРИМЕЧАНИЕ: строка "Acople" существует в имени столбца базы данных для одного продукта.

Еще одно странное поведение

Когда я перебираю поиск по sku: (sku_cont:) я получаю правильные результаты.

имя: это строка и sku: это тоже строка!!

1 ответ

Решение

Хорошо, проблема в том, что Shoppe использует globalize для переводов, и некоторые столбцы в базе данных не содержат никакой информации, потому что он использует другую таблицу для хранения этой информации.

Сейчас я ищу способ поиска в этих переводах.

Обновить

Перейдите по этой ссылке для получения дополнительной информации

Ransack поиск и переводы

Другие вопросы по тегам