Как указать поле поиска для эластичного поиска — FATAL: [] ArgumentError (необходимо указать поля для поиска):

Мое приложение rails 5 развернуто в Heroku, но функция поиска приводит к статусу 500 и сообщает мне, что мне нужно указать поле поиска для Elastic Search. Любая помощь будет принята с благодарностью.

репозиторий: https://github.com/GBressler/moldy-eggplants

Журнал Heroku: 2018-12-03T20:58:37.320538+00:00 app[web.1]: I, [2018-12-03T20:58:37.320469 #4] INFO -- : [cb92c5ee-9b97-4939-944e -14a06610a61b] Параметры: {"utf8"=>"✓", "search"=>"deadpool"} 2018-12-03T20:58:37.388702+00:00 app[web.1]: I, [2018-12 -03T20:58:37.388584 #4] ИНФОРМАЦИЯ -- : [cb92c5ee-9b97-4939-944e-14a06610a61b] Завершено 500 внутренних ошибок сервера за 68 мс (ActiveRecord: 0,0 мс) 2018-12-03T20:58:37.399605+00:00 приложение[web.1]: F, [2018-12-03T20:58:37.399462 #4] FATAL -- : [cb92c5ee-9b97-4939-944e-14a06610a61b] 2018-12-03T20:58:37.399680+00:00 app[web.1]: F, [2018-12-03T20:58:37.399609 #4] FATAL -- : [cb92c5ee-9b97-4939-944e-14a06610a61b] ArgumentError (Для поиска необходимо указать поля): 2018-12- 03T20:58:37.399746+00:00 приложение[web.1]: F, [2018-12-03T20:58:37.399683 #4] FATAL -- : [cb92c5ee-9b97-4939-944e-14a06610a61b] 2018-12- 03T20:58:37.399827+00:00 приложение[web.1]: F, [2018-12-03T20:58:37.399766 #4] FATAL -- : [cb92c5ee-9b97-4939-944e-14a06610a61b] приложение/контроллеры/ movie_controller.rb:8:в `se arch' 2018-12-03T20:58:37.398344+00:00 heroku[router]: at=info method=GET path= "/movies/search?utf8= %E2%9C%93&search=deadpool" host=безымянный-овраг -32235.herokuapp.com request_id=cb92c5ee-9b97-4939-944e-14a06610a61b fwd="179.6.192.118" dyno=web.1 connect=0ms service=86ms status=500 байт=1827 протокол=https


person Greg B    schedule 03.12.2018    source источник


Ответы (1)


Похоже, ваш атрибут параметра поиска не внесен в белый список в вашем контроллере фильмов.

# Never trust parameters from the scary internet, only allow the white list through.
def movie_params
  params.require(:movie).permit(:title, :description, :movie_length, :director, :image, :rating)
end

Теоретически вы можете сделать что-то вроде...

 # Never trust parameters from the scary internet, only allow the white list through.
def movie_params
  params.require(:movie).permit(:title, :description, :movie_length, :director, :image, :rating, :search)
end

Теперь при отправке параметров просто убедитесь, что они упакованы в объект фильма Parameters: {"utf8"=>"✓", "movie" => {"search"=>"deadpool"}}

Теперь просто укажите его соответствующим образом в строке 8 вашего контроллера, поэтому вместо params[:search] теперь вы будете использовать movie_params[:search]. Не проверял, дайте знать, если получится.

person kparekh01    schedule 03.12.2018