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
yredirect_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 laapp/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.)
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.