Волшебное предложение возвращает ошибку POST 404

Я пытаюсь заставить автозаполнение работать в моем приложении rails, используя Magic Suggest.

Я думаю, что это правильный вопрос: как я могу заставить MagicSuggest получить JSON, который находится по URL-адресу, который я ему даю?

Это ошибка, которую возвращает консоль, когда я набираю буквы:

POST http://localhost:3000/search_foods 404 (Not Found) jquery.js:8706
Uncaught Could not reach server 

Вот волшебный код подсказки:

 input.magicSuggest({
         data: "/foods/search/",
         placeholder: "Search Foods...",
         valueField:'idFood',
         displayField:'foodName'
       });    

Маршруты

resources :search_foods   

Контроллер и Действие

class SearchFoodsController < ApplicationController
  def index
    render json: %['Crack', 'Cocain', 'Gorilla Test', 'Horse Test']
  end
end

Когда я захожу на /search_foods url напрямую, я получаю

'Crack', 'Cocain', 'Gorilla Test', 'Horse Test'

как мой код предназначен для этого.

Я думаю, что проблема в том, что MagicSuggest по умолчанию отправляет запрос POST, хотя я не уверен, что это полностью актуально:

You can pass the url from which the component will fetch its JSON data.Data will be fetched
         *     using a POST ajax request that will * include the entered text as 'query' parameter. The results
         *     fetched from the server can be:
         *     - an array of JSON objects (ex: [{id:...,name:...},{...}])
         *     - a string containing an array of JSON objects ready to be parsed (ex: "[{id:...,name:...},{...}]")
         *     - a JSON object whose data will be contained in the results property
         *      (ex: {results: [{id:...,name:...},{...}]

3 ответа

Решение

Мои подозрения по поводу POST-запроса были правильными.

Мой друг помог, поэтому я смог это исправить.

Это то, что я сделал..

  1. Исключен контроллер FoodSearch, потому что он вообще не нужен.

  2. Создал поисковое действие в моем контроллере еды примерно так:

    def search render json: ['кокаин', 'крэк', 'тестостерон гориллы'] конец

  3. Отредактировал мои маршруты к запросу POST вместо get * Это был ключ:

    ресурсы: продукты делают коллекцию делать пост: поиск конец конец

--- Другой вариант, как предлагает karlipoppins, - просто изменить тип запроса, который выполняет magicSuggest, включив атрибут метода, например, так:

        input.magicSuggest({
           method: 'get',
           data: "/foods/search/",
           placeholder: "Search Foods...",
           valueField:'idFood',
           displayField:'foodName'
        }); 

Тогда мне не нужно будет менять маршрут для публикации.

  1. Добавил этот путь к атрибуту данных в js

    данные: "/food /search/"

Это будет огромной помощью любому, кто пытается заставить magicSuggest работать в рельсах. Это чертовски простая установка, если честно. Этот бит и JSON-форматирование - единственное, что меня здесь запутало.

Попробуй это:

input.magicSuggest({
         data: "http://localhost:3000/search_foods",
         placeholder: "Search Foods...",
         valueField:'idFood',
         displayField:'foodName'
});

В документе указано, что компонент ожидает одно из следующего:

     *     - an array of JSON objects (ex: [{id:...,name:...},{...}])
     *     - a string containing an array of JSON objects ready to be parsed (ex: "[{id:...,name:...},{...}]")
     *     - a JSON object whose data will be contained in the results property
     *      (ex: {results: [{id:...,name:...},{...}]

Когда вы посещаете /search_foods ты получаешь

'Crack', 'Cocain', 'Gorilla Test', 'Horse Test'

Это не подходит ни к одному из 3 поддерживаемых случаев.

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