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