ruby-on-rails - with - render template rails




En Rails, ¿cómo renderizas JSON usando una vista? (5)

Supongamos que está en su controlador de usuario y quiere obtener una respuesta json para una solicitud de espectáculo, sería bueno si pudiera crear un archivo en sus vistas / usuarios / directorio, llamado show.json y después de mostrar sus usuarios la acción se completa, rinde el archivo.

Actualmente necesitas hacer algo como:

def show
  @user = User.find( params[:id] )
  respond_to do |format|
    format.html
    format.json{
      render :json => @user.to_json
    }
  end
end

Pero sería bueno si pudieras crear un archivo show.json que se renderiza automáticamente así:

def show
  @user = User.find( params[:id] )
  respond_to do |format|
    format.html
    format.json
  end
end

Esto me ahorraría toneladas de dolor y eliminaría esa sensación horriblemente sucia que tengo cuando renderizo mi json en el controlador.


Como han mencionado otros, necesita una vista users / show.json, pero hay opciones a considerar para el lenguaje de plantillas ...

ERB

Funciona de la caja. Ideal para HTML, pero rápidamente descubrirá que es horrible para JSON.

RABL

Buena solución. Tiene que agregar una dependencia y aprender su DSL.

JSON Builder

Mismo trato que RABL: Buena solución. Tiene que agregar una dependencia y aprender su DSL.

Rubí llano

Ruby es increíble en la generación de JSON y no hay nada nuevo que aprender, ya que puedes llamar to_json en un Hash o un objeto AR. Simplemente registre la extensión .rb para plantillas (en un inicializador):

ActionView::Template.register_template_handler(:rb, :source.to_proc)

A continuación, cree la vista users / show.json.rb:

@user.to_json

Para obtener más información sobre este enfoque, consulte http://railscasts.com/episodes/379-template-handlers


Debería poder hacer algo como esto en su bloque respond_to :

format.json render :partial => "users/show.json"

que renderizará la plantilla en app/views/users/_show.json.erb .


Intente agregar una vista users/show.json.erb Esto se debe representar cuando realiza una solicitud para el formato JSON, y obtiene el beneficio adicional de que también lo renderiza erb, por lo que su archivo podría verse más o menos así.

{
    "first_name": "<%= @user.first_name.to_json %>",
    "last_name": "<%= @user.last_name.to_json %>"
}

RABL es probablemente la mejor solución que he visto si estás buscando una alternativa más limpia a la sintaxis de ERb. json_builder y argonaut, que son otras soluciones, ambas parecen anticuadas y no funcionarán con Rails 3.1 sin algunos parches.

RABL está disponible a través de una gema o echa un vistazo al repositorio de GitHub; buenos ejemplos también

RABL


Solo para actualizar esta respuesta por el bien de otros que terminan en esta página.

En Rails 3, solo necesita crear un archivo en views/users/show.json.erb . El objeto @user estará disponible para la vista (como lo sería para html.) Ya no necesita to_json .

Para resumir, es solo

# users contoller
def show
  @user = User.find( params[:id] )
  respond_to do |format|
    format.html
    format.json
  end
end

y

/* views/users/show.json.erb */
{
    "name" : "<%= @user.name %>"
}




rendering