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.