RAILS Algolia Как получить объект Ruby, Instantsearch.js

Я реализовал мгновенный поиск Algolia в своем приложении Rails. Я использую его для отображения списка продуктов в результатах поиска.

Для реализации мгновенного поиска я следовал руководству Algolia.

Я создал Индекс под названием Продукты (в моей учетной записи Algolia). У него есть имя, URL-адрес, изображение и идентификатор (+ идентификатор объекта, предоставленный Algolia).

Мой файл application.js с виджетами поиска Algoli:

    var search = instantsearch({
  // Replace with your own values
  appId: "1JJ5DY0CLA",
  apiKey: 'e24882443747d61c496efc4e17288a36', // search only API key, no ADMIN key
  indexName: 'Idea',
  urlSync: true
});


search.addWidget(
  instantsearch.widgets.searchBox({
    container: '#search-input',
    placeholder: 'Search for growth ideas',
    poweredBy: true
  })
);

search.addWidget(
  instantsearch.widgets.hits({
    container: '#hits',
    hitsPerPage: 10,
    templates: {
      item: getTemplate('hit'),
      empty: getTemplate('no-results')
    }
  })
);

search.start();

function getTemplate(templateName) {
  return document.querySelector('#' + templateName + '-
template').innerHTML;
}

Код внутри моего представления index.html.erb выглядит так:

# Comment: this is the code to structure each result sent by the API
<script type="text/html" id="hit-template">
    <div class="product">
       <div class="product-title">  
          <h3>{{title}}</h3>
       </div>
       <div class="product-link">
          <%= link_to "Voir", CGI::unescape(product_path("
          {{objectID}}")) %>
       </div>
  </div>

Вот результат, отправленный Algolia (получил его из браузера), не знаю, как получить переменную результата внутри представления / контроллера.

"hits": [
    {
      "id": 1881,
      "name": "FOULARD NOA PRINT OFF WHITE/TERRA/GERANIUM",
      "female": true,
      "category": "Accessoires",
      "brand_id": 7,
      "url": "https://www.ekyog.com/foulard-noa-print-off-white/terra/geranium.html",
      "photos": [
        "https://www.ekyog.com/Imagestorage/imagesSynchro/556/790/e86cffa2bbbeea83a9d4bb7de0bbd5c368a6c9dd_B-FOU-288-P219.jpg",
        "https://www.ekyog.com/Imagestorage/imagesSynchro/556/790/4644f21ce6e8ddf8a1b3af053264c2c5429567d5_B-FOU-288-P219-CONF1.jpg"
      ],
      "price_cat": "0€ - 50€",
      "subcategory": "Echarpes & Foulards",
      "price_cents": 3400,
      ....

Я могу получить такую ​​ссылку:

<%= link_to "Voir",  CGI::unescape(product_path("{{objectID}}")) %>

Как я могу получить рубиновый объект в моем представлении?

Я стараюсь это делать:

<% product = Product.find("{{objectID}}") %>

or

<% product = Product.find("{{id}}") %>

Но это не работает. Как получить объект внутри представления / контроллера?


person Antoine Cld    schedule 21.07.2017    source источник


Ответы (1)


Ваш код ERB оценивается только во время рендеринга страницы. Ваш link_to будет работать, потому что он просто генерирует строку (например, /products/{{objectID}}), которая позже будет обновлена ​​интерфейсом.

Вы не можете использовать эти переменные, чтобы что-то с ними делать, используя код Ruby. Действительно, с instantsearch.js вы динамически получаете результаты без перезагрузки страницы, что означает, что у вас будет доступ только к контексту JavaScript.

person Jerska    schedule 21.07.2017
comment
Спасибо за ответ, значит, мне нужно сделать это с помощью REACT? - person Antoine Cld; 21.07.2017
comment
В вашем шаблоне обращения уже используется механизм шаблонов под названием Hogan: mustache.github.io/mustache.5 .html. - person Jerska; 21.07.2017