ruby on rails - rails - Rieles en busca de plantilla para solicitudes JSON
ruby on rails tutorial (2)
Intentarías con /workouts.json
En mis routes.rb
tengo:
resources :workouts
En mi controlador de entrenamientos tengo:
def show
respond_to do |format|
format.html
format.json { render :json => "Success" }
end
end
Pero cuando voy a /workouts/1.json, recibo lo siguiente:
Falta la plantilla
Faltan plantillas de entrenamiento / show, application / show con {: locale => [: en],: format = = [: json],: handlers => [: erb,: builder,: coffee]}. Se buscó en: * "/ home / rails / app / views"
Lo que parece mostrar que el formato es el que debería ser, pero sigue buscando una vista. Este mismo código funciona en otros controladores con configuraciones idénticas muy bien. Además, ir a / workouts / 1 para la vista html parece funcionar bien, aunque también representa la vista html correctamente cuando se elimina el format.html
.
Mira el código fuente de 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])
Preste atención a la tercera línea. Si el valor de :json
es una cadena, el render
no llamará a to_json
automáticamente para este valor.
Por lo tanto, el valor permanece como cadena y el render
continuará en la plantilla de búsqueda.
Para solucionarlo, suministre un hash válido incluso para propósitos de prueba.
format.json { render :json => {:message => "Success"} }