Rails ищет шаблон для запросов JSON
В моем routes.rb
у меня есть:
resources :workouts
В моем контроллере тренировок я:
def show
respond_to do |format|
format.html
format.json { render :json => "Success" }
end
end
Но когда я перехожу в /workouts/ 1.json, я получаю следующее:
Отсутствует шаблон
Отсутствие шаблонных тренировок /show, application/show с помощью {: locale = > [: en],: formats = > [: json],: handlers = > [: erb,: builder,: coffee]}. Поиск: * "/home/rails/app/views"
Что, как представляется, показывает, что формат является тем, чем он должен быть, но он все еще ищет представление. Этот же код работает в других контроллерах с одинаковыми настройками. Кроме того, просмотр /workouts/ 1 для html-представления кажется очень хорошим, хотя он также корректно отображает представление html при удалении format.html
.
Ответы
Ответ 1
Посмотрим на исходный код render
elsif options.include?(:json)
json = options[:json]
json = ActiveSupport::JSON.encode(json) unless json.is_a?(String)
json = "#{options[:callback]}(#{json})" unless options[:callback].blank?
response.content_type ||= Mime::JSON
render_for_text(json, options[:status])
Обратите внимание на третью строку. Если значение :json
является строкой, render
автоматически не будет вызывать to_json
для этого значения.
Таким образом, значение остается в виде строки, а render
- в шаблоне поиска.
Чтобы исправить, поставьте допустимый хэш даже для пробной цели.
format.json { render :json => {:message => "Success"} }
Ответ 2
Попробуйте с/workouts.json