👨💻 Hola Mundo
⚠️ Descargo de responsabilidad ⚠️
Los siguientes "apuntes" no pretenden ser un tutorial detallado, sino apuntes resumidos del tutorial paso a paso de ruby on rails en su documentación oficial. Se recomienda revisarla antes o en paralelo.
Generadores
Rails provee generadores que son scripts que nos ayudan a agilizar ciertas tareas repetitivas como por ejemplo, creación de un nuevo proyecto con rails new blog
creara un nuevo proyecto con todo el directorio base para empezar a trabajar, o podemos crear un nuevo modelo con rails generate controller Articles index
y nos creara todos los directorios y archivos basicos para empezar a trabajar.
Rutas
Son reglas de "enrutamiento", actúan como "gateway" entre las peticiones HTTP (el universo exterior) y los controladores de nuestra aplicación.
# config/routes.rb
# Para definir nuestro Home (path raiz)
root "articles#index"
# method 'get' to: 'controller#method'
get "/articles", to: "articles#index"
# For details on the DSL available within this file,
# see https://guides.rubyonrails.org/routing.html
Controlador
Son clases de Ruby y sus métodos públicos con las diferentes acciones que pueden ser recibidas desde las rutas. El controlador se encarga de conseguir/manipular/preparar la data necesario para mostrarla en una vista
y devolverla al cliente.
Podemos generar el controlador usando bin/rails generate
, esto nos va a generar el archivo para el controlador, las vistas, directorio para test y helpers.
create app/controllers/articles_controller.rb
create app/views/articles
create app/views/articles/index.html.erb
create test/controllers/articles_controller_test.rb
create app/helpers/articles_helper.rb
Nuestro index
esta vacío, no especifica de forma explicita que vista debe renderizar, por lo cual rails "intentara" mostrar una vista que tenga relación con el nombre del controlador y el método, en este caso intentara mostrar app/views/articles/index.html.erb
de forma predeterminada.
# app/controllers/articles_controller.rb
class ArticlesController < ApplicationController
def index
end
end
Vista
Son plantillas generalmente escritas en una mezcla de ruby
y html
en archivos con extension .erb
# app/views/articles/index.html.erb
<h1>Hello, Rails!</h1>
Creado el controlador y la vista, debemos agregar en las rutas, nuestra ruta para el controlador que acabamos de crear
# config/routes.rb
# method 'get' to: 'controller#method'
get "/articles", to: "articles#index"
Son esto, si iniciamos nuestro servidor bin/rails server
y visitamos la ruta http://localhost:3000/articles
podremos ver nuestro Hello, Rails! \o/
Autoloading
En Rails las clases de aplicación y módulos están disponibles en todas partes, no es necesario hacer requiere. Para mas detalles revisa esta sección
🗂️ Hola base de datos
Modelo
Un Modelo es una clase en ruby que es usada para representar datos. Adicionalmente los modelos pueden interactuar con la base de datos de la aplicación mediante una característica de Rails llamada ActiveRecord Ref
Para definir un nuevo modelo, podemos usar el generador que nos provee rails y escribir bin/rails generate model Article title:string body:text
.
Los nombre de los modelos son en singular, por que al instanciarlos, estos representan un solo registro.
Al generar un nuevo modelo, se genera de forma automática dos archivos
app/models/article.rb
: donde se define nuestro modelodb/migrate/<timestamp>_create_articles.rb
: archivo de migración
# app/models/article.rb
class Article < ApplicationRecord
end
Migración
Son usadas para alterar la estructura de la base de datos de la aplicación. En rails son clases escritas en ruby y pueden ser agnósticas a la base de datos.
# db/migrate/<timestamp>_create_articles.rb
class CreateArticles < ActiveRecord::Migration[7.0]
def change
create_table :articles do |t|
t.string :title
t.text :body
t.timestamps
end
end
end
Al llamar a create_table
, se define como la tabla articles debe ser construida.
- Se creará una columna
id
como primary key auto incremental. - En el bloque se incluyen
title
ybody
por que se incluyeron en la definición del generador del modelogenerate model Article title:string body:text
-
En la última linea del bloque se llama a
t.timestamps
Este método define dos campos adicionalescreated_at
: Cuando fue creado el registroupdated_at
: Cuando fue actualizado el registro
Para que nuestro modelos recién generado se vea reflejado en nuestra base de datos, debemos decirle a rails que aplique estos cambios, y lo hacemos ejecutando bin/rails db:migrate
Para ver en detalle esto, visita la docu oficial aquí
Interactuando con los modelos
Rails posee una consola interactiva similar a irb, para ingresar a ella basta con poner bin/rails console
Inicializar un objeto
article = Article.new(title: "Hello Rails", body: "I am on Rails!")
Guardando el objeto en la DB
article.save
Después de haber guardado el objeto, podemos imprimirlo en consola y notaremos que los atributos id
, created_at
, updated_at
han sido definidas. Esto ocurre cuando nuestros objetos han sido guardados.
Para crear un item directo en la base de datos, puedes usar el método create directamente
user = User.create(name: "David", occupation: "Code Artist")
Buscando un objeto en la DB por su primary key
Article.find(1)
=> <Article id: 1, title: "Hello Rails", body: "I am on Rails!", created_at: "2020-01-18 23:47:30", updated_at: "2020-01-18 23:47:30">
Buscando todos los registros de un modelo
Article.all
=> #<ActiveRecord::Relation [#<Article id: 1, title: "Hello Rails", body: "I am on Rails!", created_at: "2020-01-18 23:47:30", updated_at: "2020-01-18 23:47:30">]>
Este método retorna un ActiveRecord::Relation
que es un array con super poderes.
ActiveRecord::Relation
es una representación de una consulta que se puede ejecutar en su base de datos (pero aún no se ejecutó). Una vez que ejecute esa consulta llamando ato_a
,each
,first
, etc. en esa relación, se devolverá una sola instancia o una matriz de instancias deActiveRecord::Base
.fuente: stackoverflow 😬
Para profundizar puedes revisar: