rails how application ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-3.2

ruby-on-rails - how - render json rails



¿Cuál es la diferencia entre link_to, redirect_to y render? (8)

De hecho, acabo de escribir una publicación en un blog sobre esto . Los bits más importantes se copian a continuación (con modificaciones).

Métodos del controlador: render vs. redirect_to

render y redirect_to son las dos formas en que finalizan las acciones del controlador (generalmente hablando). Para comprender cómo funcionan, repasemos qué hacen los controladores en una aplicación de Rails:

  • Un usuario intenta acceder a una página.
    ( http://localhost:3000/books/index.html )
  • Debajo del capó, el navegador envía una solicitud HTTP para la ruta especificada en el servidor.
    ( GET /books/index.html )
  • El sistema de enrutamiento Rails busca qué controlador corresponde a la ruta de solicitud dada.
    ( books GET /books/index(.:format) books#index )
  • El controlador prepara algunos datos y luego le dice al servidor qué respuesta ( es decir, qué encabezado HTTP / contenido del cuerpo) para enviar de vuelta al cliente .

Este último paso se produce de forma explícita cuando llamas a render o redirect_to , o implícitamente si lo dejas fuera .

Es decir,

def index @books = Book.all end

es lo mismo que

def index @books = Book.all render :index end

render :index dice: ''combine los datos que preparé ( @books = Book.all ) con la plantilla de vista books/index.html.erb para generar un documento HTML completo y luego envíelo de vuelta al cliente''.

redirect_to @book dice, ''dile al cliente que comience todo el proceso otra vez, emitiendo una nueva solicitud GET a url_for(@book) .

Si omites ambos, la acción generará una plantilla con el mismo nombre que la acción en sí. En otras palabras, solo debe invocar el render explícita cuando la plantilla de visualización que desea no coincida con la acción desde la que la realiza.

Tenga en cuenta que no todas las acciones del controlador tienen una plantilla de vista correspondiente. En general, #create , #update y #destroy (que se enrutan todos a solicitudes HTTP que no son GET ) intentan realizar algunos cambios en la base de datos y luego redirect_to algún recurso (si lo lograron) o vuelven a enviar el formulario que precedió esto, junto con cualquier error (si falló).

Como explican los guías oficiales (énfasis mío),

Estos dos métodos [ render y redirect_to ] representan los dos arquetipos de acción básicos utilizados en Action Controllers: Get-and-show y do-and-redirect . La mayoría de las acciones son variaciones de estos temas.

Ver métodos: render vs. link_to

render también se usa dentro de las plantillas de visualización. En lugar de generar un documento HTML completo, se usa para insertar una plantilla de vista parcial en una más grande. Aquí está el resultado:

  • Puede crear archivos de plantilla de vista parcial para insertarlos en sus plantillas estándar (piénsese en ellos como componentes de página modulares).
  • Los nombres de archivos de los parciales deben comenzar con un guión bajo ( p. _nav.html.erb . , _nav.html.erb ).
  • Use render ''nav'' si desea incluir el _nav.html.erb parcial desde una vista ubicada en la misma carpeta .
  • Use render ''shared/nav'' si desea incluir el parcial en la app/views/shared/_nav.html.erb desde cualquier vista en su proyecto .
  • Existen diversas opciones y sintaxis abreviadas para pasar datos a un parcial, renderizar múltiples parciales de un objeto de colección, y más. Ver las guías para más detalles.

link_to es solo un método conveniente para insertar etiquetas de anclaje (etiquetas a href ) en sus plantillas de visualización. Esto es útil porque muchas de las URL a las que desea vincularse son otras páginas dentro de su aplicación, y esas URL se pueden referenciar utilizando objetos o "métodos auxiliares", de esta manera:

= link_to ''Back'', books_path # renders as <a href="/books">Back</a> = link_to ''View'', @book # renders as <a href="/book/1">View</a> or similar

Estoy confundido acerca de la (s) principal (es) diferencia (s) entre link_to , redirect_to y render en Rails. cualquiera puede por favor explicar


De la http://guides.rubyonrails.org/layouts_and_rendering.html :

En cuanto a renderizar una vista vs redirigir una solicitud

. . . render le dice a Rails qué vista (u otro activo) usar para construir una respuesta. El método redirect_to hace algo completamente diferente: le dice al navegador que envíe una nueva solicitud para una URL diferente.

En cuanto a renderizar una vista

. . . render: la acción no ejecuta ningún código en la acción objetivo. . .

En cuanto a redirigir una solicitud

. . . Su código deja de funcionar y espera una nueva solicitud para el navegador. Simplemente sucede que le has dicho al navegador qué pedido debe hacer a continuación, enviando un código de estado HTTP 302.

Básicamente:

link_to es un método de ayuda para generar URL generalmente usadas en sus vistas (archivos .html.erb )

render le dice a su controlador que represente una vista sin pasar ningún dato (por ejemplo, de un formulario) a la siguiente acción del controlador.

redirect_to hace una redirección de 302 páginas, pasando datos (por ejemplo, desde un formulario) a una acción de controlador en su aplicación web, o una aplicación externa (por ejemplo, google, facebook, un artículo web que le gustó, etc.)


De las guías oficiales de Rails :

Como has visto, render le dice a Rails qué vista (u otro activo) usar para construir una respuesta. El método redirect_to hace algo completamente diferente: le dice al navegador que envíe una nueva solicitud para una URL diferente.

Un link_to se usa en un formulario dentro de rieles, y es un ayudante para crear un elemento de enlace dentro de html. Los otros dos no se usan en formularios, sino que se usan en controladores.

Usted render una página si su método de control está vinculado a esa página. Por ejemplo, al llamar ''nuevo'' debería aparecer la página ''nuevo artículo''. Cumplen con la solicitud que acaba de hacerse.

redirect se usa exactamente para eso, redireccionando. Por ejemplo, si intenta acceder a una página donde debe iniciar sesión, redirige al usuario a la página de inicio de sesión. Entonces, los redireccionamientos básicamente generan una nueva solicitud.


Un enlace_para crear un hipervínculo a una URL específica, que aparece en el HTML.

Un redirect_to decidirá dónde vincularlo, dependiendo de ciertas opciones. Por ejemplo, si alguien está conectado como usuario, puede mostrarle su página de configuración, de lo contrario redireccionar a la página de inicio.

Un renderizado abrirá el archivo renderizado, tomará su contenido y lo pegará en el archivo existente, antes de enviar todo el fragmento al destinatario.

Espero tener razón


link_to generará un html anchor estándar = un enlace (link_to documentation)

redirect_to se usa comúnmente para respuestas de página como actualización y eliminación. Tomará los parámetros que le dé y dirigirá su página de manera adecuada. (redirigir a la documentación)

render se usa para cargar parciales o cargar archivos .erb específicos en otros. (rinde la documentación)

Hay un montón de ejemplos en this guía de rieles que deberían explicar render y redirect_to. link_to es bastante diferente de rendering y redirect_to


link_to se usa en su vista y genera código html para un enlace

<%= link_to "Google", "http://google.com" %>

Esto generará en su vista el siguiente html

<a href="http://google.com">Google</a>

redirect_to y render se usan en su controlador para responder a una solicitud. redirect_to simplemente redirigirá la solicitud a una nueva URL, si en tu controlador agregas

redirect_to "http://google.com"

cualquiera que acceda a tu página será redirigido efectivamente a Google

render se puede utilizar de muchas maneras, pero se usa principalmente para representar sus vistas html.

render "article/show"

Esto representará la vista "app / views / article / show.html.erb"

El siguiente enlace explicará los métodos redirect_to y render más detalladamente http://guides.rubyonrails.org/layouts_and_rendering.html


link_to es para usar en plantillas ERB. Muestra un enlace a una ruta de acceso o url específica.

redirect_to es para usar en controladores. Hace que el cliente solicite la ruta o URL especificada una vez que el método del controlador sale.

render también es para uso en controladores. Hace que Rails represente la plantilla especificada.

redirect_to y render solo se pueden llamar una vez en un método de controlador determinado.