¡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!
Si no ha leído las Partes 1 y 2, se recomienda encarecidamente que las revise antes de continuar con este tutorial..
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:
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.
clase LearnController < ApplicationController def another_action @text = text end def text misc_text = 'This text really traveled!' end end
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
Este es el orden de eventos que hizo el siguiente código:
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
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..
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..
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
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
Í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.
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:
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:
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..
¡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ó!