Ruby on Rails - Andamios

Mientras desarrolla aplicaciones Rails, especialmente aquellas que principalmente le brindan una interfaz simple para los datos en una base de datos, a menudo puede ser útil utilizar el método de andamio.

Los andamios proporcionan más emociones que una demostración barata. Aquí hay algunos beneficios:

  • Puede mostrar rápidamente el código a sus usuarios para recibir comentarios.

  • Estás motivado por un éxito más rápido.

  • Puede aprender cómo funciona Rails mirando el código generado.

  • Puede utilizar andamios como base para impulsar su desarrollo.

Ejemplo de andamio

Para entender el andamiaje, creemos una base de datos llamadacookbook y una mesa llamada recipes.

Creación de una aplicación web de rieles vacíos

Abra una ventana de comando y navegue hasta donde desea crear este cookbookAplicación web. Entonces, ejecute el siguiente comando para crear una estructura de directorio completa.

tp> rails new cookbook

Configurar la base de datos

Esta es la forma de crear una base de datos:

mysql> create database cookbook;
Query OK, 1 row affected (0.01 sec)

mysql> grant all privileges on cookbook.*
to 'root'@'localhost' identified by 'password';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

Para indicarle a Rails cómo encontrar la base de datos, edite el archivo de configuración cookbook \ config \ database.yml y cambie el nombre de la base de datos a cookbook. Deje la contraseña en blanco. Cuando termine, debería verse como sigue:

development:
   adapter: mysql
   database: cookbook
   username: root
   password: [password]
   host: localhost
	
test:
   adapter: mysql
   database: cookbook
   username: root
   password: [password]
   host: localhost
	
production:
   adapter: mysql
   database: cookbook
   username: root
   password: [password]
   host: localhost

Rails te permite ejecutar en modo de desarrollo, modo de prueba o modo de producción, utilizando diferentes bases de datos. Esta aplicación usa la misma base de datos para cada uno.

El código de andamio generado

Con la acción de andamio, Rails genera todo el código que necesita de forma dinámica. Al ejecutar scaffold como un script, podemos obtener todo el código escrito en el disco, donde podemos investigarlo y luego comenzar a adaptarlo a nuestros requisitos.

Así que ahora, comencemos una vez más a generar código de Scaffold manualmente usando el script de ayuda de scaffold -

cookbook> rails generate scaffold recipe

Genera archivos automáticos como se muestra a continuación:

El controlador

Veamos el código detrás del controlador. Este código es generado por elscaffoldgenerador. Si abre app / controllers / recipes_controller.rb, encontrará algo de la siguiente manera:

class RecipesController < ApplicationController
   before_action :set_recipe, only: [:show, :edit, :update, :destroy]
   
   # GET /recipes
   # GET /recipes.json
   def index
      @recipes = Recipe.all
   end
   
   # GET /recipes/1
   # GET /recipes/1.json
   def show
   end
   
   # GET /recipes/new
   def new
      @recipe = Recipe.new
   end
   
   # GET /recipes/1/edit
   def edit
   end
   
   # POST /recipes
   # POST /recipes.json
   def create
      @recipe = Recipe.new(recipe_params)
      
      respond_to do |format|
         if @recipe.save
            format.html { redirect_to @recipe, notice: 'Recipe was successfully created.' }
            format.json { render :show, status: :created, location: @recipe }
         else
            format.html { render :new }
            format.json { render json: @recipe.errors, status: :unprocessable_entity }
         end
      end
      
   end
   
   # PATCH/PUT /recipes/1
   # PATCH/PUT /recipes/1.json
   def update
      respond_to do |format|
         if @recipe.update(recipe_params)
            format.html { redirect_to @recipe, notice: 'Recipe was successfully updated.' }
            format.json { render :show, status: :ok, location: @recipe }
         else
            format.html { render :edit }
            format.json { render json: @recipe.errors, status: :unprocessable_entity }
         end
      end
      
   end
   
   # DELETE /recipes/1
   # DELETE /recipes/1.json
   def destroy
      @recipe.destroy
         respond_to do |format|
         format.html { redirect_to recipes_url, notice: 'Recipe was successfully destroyed.' }
         format.json { head :no_content }
      end
   end
   
   private
   
   # Use callbacks to share common setup or constraints between actions.
   def set_recipe
      @recipe = Recipe.find(params[:id])
   end
   
   # Never trust parameters from the scary internet, only allow the white list through.
   def recipe_params
      params.require(:recipe).permit(:tittle, :instructions)
   end
end

Cuando el usuario de una aplicación Rails selecciona una acción, por ejemplo, "Mostrar" - el controlador ejecutará cualquier código en la sección apropiada - "def show" - y luego, por defecto, generará una plantilla con el mismo nombre - "show.html". erb ". Este comportamiento predeterminado se puede sobrescribir.

El controlador usa métodos ActiveRecord como find, find_all, new, save, update_attributes y destroy para mover datos hacia y desde las tablas de la base de datos. Tenga en cuenta que no tiene que escribir ninguna declaración SQL, rails se encargará de ello automáticamente.

Esta única línea de código dará vida a la tabla de la base de datos. Proporcionará una interfaz simple para sus datos y formas de:

  • Creando nuevas entradas
  • Editar entradas actuales
  • Ver entradas actuales
  • Destruyendo las entradas actuales

Al crear o editar una entrada, scaffold hará todo el trabajo duro, como la generación y el manejo de formularios, e incluso proporcionará una generación de formularios inteligente, que admite los siguientes tipos de entradas:

  • Cadenas de texto simples
  • Áreas de texto (o grandes bloques de texto)
  • Selectores de fecha
  • Selectores de fecha y hora

Puede utilizar Rails Migrations para crear y mantener tablas.

rake db:migrate RAILS_ENV=development

Ahora, vaya al directorio del libro de recetas y ejecute el servidor web con el siguiente comando:

cookbook> rails server

Ahora, abra un navegador y navegue hasta http://127.0.0.1:3000/recipe/new.Esto le proporcionará una pantalla para crear nuevas entradas en la tabla de recetas. A continuación se muestra una captura de pantalla:

Una vez que presione el Create para crear una nueva receta, su registro se agrega a la tabla de recetas y muestra el siguiente resultado:

Puede ver la opción de editar, mostrar y destruir los registros. Entonces, juega con estas opciones.

También puede enumerar todas las recetas disponibles en la tabla de recetas utilizando la URL http://127.0.0.1:3000/recipe/list.

Mejorando el modelo

Rails te ofrece una gran cantidad de manejo de errores de forma gratuita. Para comprender esto, agregue algunas reglas de validación al modelo de receta vacía:

Modifique la aplicación / modelos / receta.rb de la siguiente manera y luego pruebe su aplicación:

class Recipe < ActiveRecord::Base
   validates_length_of :title, :within => 1..20
   validates_uniqueness_of :title, :message => "already exists"
end

Estas entradas darán una verificación automática.

  • validates_length_of - el campo no está en blanco y no es demasiado largo.

  • validates_uniqueness_of- los valores duplicados quedan atrapados. En lugar del mensaje de error predeterminado de Rails, hemos proporcionado un mensaje personalizado aquí.

Forma alternativa de crear andamios

Cree una aplicación como se muestra arriba y The Generated Scaffold Code Como se muestra abajo

rails g scaffold Recipe tittle:string instructions:text

El código anterior genera los archivos automáticos con la base de datos utilizando sqlite3 con título y columna de instrucciones como se muestra debajo de una imagen.

necesitamos migrar la base de datos usando la siguiente sintaxis.

$ rake db:migrate RAILS_ENV=development

Finalmente ejecute la aplicación usando la siguiente línea de comando:

rails server

Generará el resultado como se muestra arriba en las imágenes de salida.

Las vistas

Todas las vistas y todos los métodos del controlador correspondientes son creados por scaffold comando y están disponibles en el directorio app / views / recipes.

¿En qué se diferencian los andamios?

Si ha repasado los capítulos anteriores, debe haber visto que habíamos creado métodos para enumerar, mostrar, eliminar y crear datos, etc., pero el andamio hace ese trabajo automáticamente.