ruby on rails - respond_to - Rieles: responda a JSON y HTML
respond_to ruby (3)
Tengo un controlador "UserController" que debe responder a las peticiones normal y ajax a http://localhost:3000/user/3
.
Cuando es una solicitud normal, quiero mostrar mi vista. Cuando se trata de una solicitud AJAX, quiero devolver JSON.
El enfoque correcto parece ser un respond_to do |format|
un respond_to do |format|
bloquear. Escribir el JSON es fácil, pero ¿cómo puedo obtener que responda al HTML y simplemente renderizar la vista como de costumbre?
def show
@user = User.find(params[:id])
respond_to do |format|
format.html {
render :show ????this seems unnecessary. Can it be eliminated???
}
format.json {
render json: @user
}
end
end
La mejor manera de hacerlo es como dijo Amitkumar Jha, pero si necesitas una forma simple y rápida de renderizar tus objetos, también puedes usar este "atajo":
def index
@users = User.all
respond_to :html, :json, :xml
end
O haz que respond_to
funcione para todas las acciones en el controlador usando responder_con:
class UserController < ApplicationController
respond_to :html, :json, :xml
def index
@users = User.all
respond_with(@users)
end
end
A partir de la versión de Rails 4.2, necesitará usar el gem responder
para poder usar responder_con.
Si necesita más control y desea poder tener algunas acciones que actúen de manera diferente, siempre use un bloque de respuesta completa. Puedes leer más here .
Sí, puedes cambiarlo a
respond_to do |format|
format.html
format.json { render json: @user }
end
Según mi conocimiento, no es necesario para "mostrar show" en formato.html buscará automáticamente una vista de acción respectiva para ex: show.html.erb para solicitud html y show, js, erb para solicitud JS.
entonces esto funcionará
respond_to do |format|
format.html # show.html.erb
format.json { render json: @user }
end
también, puede verificar que la solicitud sea ajax o no, marcando request.xhr? devuelve true si request es ajax one.