Ruby on Rails de Scratch Week 3

¡Bienvenido a Ruby on Rails From Scratch Week 3! Esta semana, nos centraremos en las cosas específicas que necesita saber sobre el marco. Por ejemplo, vamos a hablar sobre la manipulación de la estructura del proyecto de dos maneras (representación y redirección). También hablaremos sobre cómo agregar enlaces en los rieles y cómo comentar el código. Empecemos ya!

Alcanzando

Si no ha leído las Partes 1 y 2, se recomienda encarecidamente que las revise antes de continuar con este tutorial..

  • Semana uno
  • Semana dos

Agregando Interacciones Entre Acciones

Ahora que hemos aprendido cómo configurar variables de instancia para transferir información desde el controlador a la vista, es hora de aprender cómo transmitir datos entre diferentes acciones en un controlador. Para este tutorial, continuaremos usando el controlador de aprendizaje. Realmente no necesitamos mantener lo que hicimos la semana pasada, pero puedes hacerlo si crees que es un buen recurso. Comenzaremos de manera simple:

Realizar otra acción en una acción diferente

Para este ejemplo, el encabezado es más complejo que la lección real. Simplemente usaremos lo que está en una acción y haremos lo mismo en otra. Usemos el conocimiento que obtuvimos la semana pasada sobre las variables de instancia y lo apliquemos ahora. Primero, vamos a crear una nueva acción llamada "another_action"; luego otra acción llamada "texto". Luego vamos a obtener la acción del texto y la pondremos en "another_action". Vamos a demostrar esto, haciendo referencia a una variable de instancia en la vista de "another_action" que se asignó en el controlador de "texto". Lo siento, si eso no tuviera sentido. Si no recibiste lo que acabo de decir, mira el siguiente código, que espero te ayude:

 clase LearnController < ApplicationController def another_action text end def text @text = 'This text came from another action' end end

Luego vamos a crear una vista llamada "another_action.html.erb", donde hacemos referencia al texto variable.

  Demostración de acción   <%= @text %>  

Explicación

Como puede ver, hicimos referencia al "texto" de la acción simplemente colocándolo dentro de "another_action". Al hacer esto, también pasamos la definición de "texto", que era la variable de instancia. Para demostrar aún más este principio, pongámoslo en varias situaciones diferentes, todas las cuales funcionan.

Situación 1- Configuración de una variable de instancia igual a una acción

 clase LearnController < ApplicationController def another_action @text = text end def text misc_text = 'This text really traveled!' end end

Situación 1 Resultado

Situación 2 - Reemplazar variable

Ahora vamos a ser aún más complejos:

 clase LearnController < ApplicationController def another_action @text = "text you'll never see" @text = text end def text wanted_text = overwrite_view end def overwrite_view overwrite_text = 'This text overwrote the original text' end end

Situación 2 Resultado

Este es el orden de eventos que hizo el siguiente código:

  • Dio a la variable de instancia "texto" un valor de "texto que nunca verás"
  • Luego lo reasignó a la acción "texto".
  • La variable "texto", ahora tiene el valor del texto deseado de la variable local.
  • La variable wanted_text tiene un valor de la acción "overwrite_view"
  • Overwrite_view tiene una variable local con el valor "Este texto sobrescribió el texto original"
  • Esto lleva de nuevo a la variable de instancia de @text.

Situación 3 llevar una variable

Vamos a mantener este más simple:

clase LearnController < ApplicationController def another_action @text = "text you'll never see" text end def text @text = 'This text overwrote the original text' end end


Situación 3 Resultado

Situación 4 Retornando Algo Específico

clase LearnController < ApplicationController def another_action @text = text end def text first = 'This text should not be passed to @text' second = 'This text would be put into the variable on default' return first end end

Este ejemplo es particularmente importante, ya que ahora estás aprendiendo un poco más de sintaxis; la regreso mando. Esto le dirá a la acción qué devolver al final..

Situación 4 Resultado

Enlaces de rieles

Todos deberían saber cómo crear un enlace HTML normal. (Utilizando Texto) Pero también hay una manera de hacerlo con Rails. Este método no es Ruby, sino más bien una parte del marco. Dicho esto, solo puede usarlo en archivos HTML ruby ​​incrustados, no en archivos rb puros. Entonces, ¿Cómo lo hacemos? Aquí está el código:

  Rails Link Demo   <%= link_to('Another Action Link', :controller => 'aprender',: acción => 'otra_acción')%>  

A primera vista, podría preguntarse por qué cambiaría la forma en que escribe los enlaces, ¡especialmente si el reemplazo es más largo! Bueno, una razón principal es la legibilidad. Puede leer esto fácilmente y saber exactamente a qué se vinculará. En cuanto a la longitud, la parte: controller => no es necesaria si está enlazando a una acción dentro del mismo controlador.

Con este código de rieles también vemos símbolos. El ": controller =>" es un símbolo. Hablaremos más sobre lo que hacen más tarde, pero por ahora solo reconocemos el colon..

Representación en rieles

Anteriormente en esta serie, hablamos un poco sobre los valores predeterminados de los rieles. Uno de los valores predeterminados es generar una vista que tenga el mismo nombre que la acción en la vista correspondiente. Pero, ¿y si quisiéramos sobrescribir lo que hacen los rieles automáticamente? Esto es realmente bastante fácil, y una técnica muy útil. Cuando está trabajando en un proyecto del mundo real, puede imaginarse qué tan 'torpe' se volvería su controlador si tuviera que crear una vista y acción separadas en el controlador para cada página. Sin embargo, Rails tiene una solución, que se llama rendering.. Representación le permite especificar qué vista usar para cada acción. Sin embargo, tenga en cuenta que, al igual que los enlaces de rieles, esto también es un código exclusivo de rieles y no ruby, y está destinado solo para el controlador.

Si lo anterior te ha dejado un poco confundido, déjame mostrarte cómo hacerlo. Esperemos que esto lo aclare un poco. Para este primer ejemplo, vamos a renderizar la acción a la vista que normalmente se representaría de todos modos. En otros términos, este código de renderizado no hace nada que no sucedería sin él. Todo lo que hace es mostrar un código que normalmente solo se "asume"..

 def index render: action => 'index' end

Renderizar una acción a otra vista

El último ejemplo no es realmente útil ya que el resultado se logra automáticamente de todos modos. Pero, ¿qué pasaría si tuviera una vista realmente avanzada para otra acción y deseara la misma vista para una acción diferente? ¡No solo sería tedioso crear otra vista idéntica para cada acción que creas, sino que también sería casi imposible de actualizar! Todo eso se puede arreglar sin embargo, al representar cada acción similar a una acción específica. Examine el siguiente fragmento de código que explicaré más adelante, y observe las diferentes partes..

text_controller.rb:

 clase LearnController < ApplicationController def index render :action => 'text' end def text @text = 'Texto'end def other @text ='Otro'render: action =>' text 'end end end

text.html.erb:

   Demostración de la representación de rieles 

Bienvenida a la <%= @text %> Página

Explicación del Código:

Índice de acción

Puede que hayas notado que incluí una acción llamada "índice". Esta acción se verá si sube un directorio para "aprender". Funciona como lo haría un archivo de índice ordinario. Sin embargo, no es necesario crear una acción específica para el índice. También puede utilizar el tema cubierto anteriormente para heredar otra acción..

Renderizado a la misma vista.

Para este ejemplo, solo necesitamos una vista para todas las acciones; y todos produjeron páginas diferentes. Para mí, esto es bastante increíble por la cantidad de trabajo que ponemos.

Nota: Esto puede parecer obvio para algunos, pero tenga cuidado con la doble representación. La doble representación causará un error porque está intentando representar una acción en dos lugares diferentes. ¿Puedes estar en dos lugares a la vez? No, y tampoco puede una acción. Si desea ver qué aspecto tiene, simplemente renderice una acción a dos vistas diferentes. La razón por la que sucede cuando estás haciendo proyectos más complejos es porque el camino de las acciones puede ser bastante complejo, y puedes crear este error accidentalmente..

Asegúrese de obtener el concepto básico de renderizado, ya que será una técnica muy importante que usará a menudo como desarrollador de rieles.

Redirigiendo una acción

Redirigir una acción es similar a representar una acción en el hecho de que también es un código de rieles y solo se usa en el controlador. Además, efectúa el flujo de la aplicación. Como puede adivinar por el nombre, la redirección le permite ... bien redirigir.

Es posible que se sorprenda por la cantidad de veces que usa el comando de redirección. Aquí hay algunos usos comunes:

  • Creando páginas de alias
  • Realizar una acción en el controlador y luego redirigir a una página secundaria
  • Si hay un error, redirigir a una página de error.
  • Si el usuario no ha iniciado sesión, envíelo a una página de inicio de sesión

Basta de chit chat, vamos al código! Para este ejemplo de código, solo vamos a modificar el controlador del último ejemplo y dejar la vista igual. Como verá, la redirección es muy similar en formato a la representación:

 clase LearnController < ApplicationController def index redirect_to :action => 'text' end def text @text = 'Texto'redirect_to: action =>' other 'end def otro render: action =>' text 'end end

Ahora ve a la acción de índice en tu navegador. Notará que termina en la otra acción en su barra de direcciones. Repasemos este código:

  • Primero, redirigimos al texto de acción. Al igual que los enlaces en los rieles, también puede especificar un controlador si está redirigiendo a otro controlador. Solo pondrías: controller => 'learn', antes de la acción.
  • El navegador ahora va a la acción de texto. Aquí se establece un valor para @text. Pero el navegador no tiene valor para @text. Esto se debe a que la redirección esencialmente olvida todo lo que se le dice en esa acción.
  • Ahora estamos redirigidos a otros. Aquí rendimos a la vista de texto.

Renderizar o Redirigir?

Si bien hay algunos escenarios obvios en los que elegiría renderizar o redirigir; Puede haber algunas decisiones más difíciles. Sin embargo, una clave importante es que si está enviando datos a una base de datos o algo que está cambiando la aplicación, use una redirección. De lo contrario, una actualización podría volver a enviar los datos..

Pensamientos finales

¡Espero que hayan aprendido mucho del tutorial de esta semana! Cubrimos muchos conceptos importantes, por lo que si aún está confundido por algo, vuelva a leerlo. La próxima semana probablemente entraremos en la sintaxis de Ruby.!

Como siempre, no dude en dejar preguntas en los comentarios.. También, por favor digg este artículo si te ayudó!