Está en la página 1de 38

CRUD desde cero _

Sesión Presencial 5 (Parte I)


CRUD
r e p e
e a d l
a d a e
t t t
e e e
Un crud suele tener 7 métodos

Create new Read index

create show

Update edit Delete destroy

update
Los métodos crud se construyen
en relación a un recurso
Ejemplos

● Artículos
● Comentarios
● Usuarios
● Grupos
● Tags
● Productos

entre otros
¿Por qué construir un crud manual?

● Construir un CRUD manual nos ayudará a entender a fondo todos los pasos.
● Volveremos a repasar el patrón MVC.
● Más adelante nos ayudará a construir un CRUD anidado.
Para crear un crud manualmente tenemos que:

● Crear el modelo con los campos que queremos guardar


● Crear el controller con los métodos CRUD (aunque estos podemos crearlos a medida de que
los necesitemos)
Creando un crud manual
Ingresamos a la carpeta de nuestro proyecto y ahora generaremos un controller de Posts vacío.

rails g controller posts

Convención: los nombres de los controllers siempre son el plural


También crearemos el modelo de post con los campos title y content.

rails g model Post title:string content:text

Convención: los nombres de los modelos siempre son en singular


Cuando generamos un modelo, el proceso crea automáticamente un archivo en la carpeta
db/migrate

Estos son los datos


class CreatePosts < ActiveRecord::Migration[5.1] que entregamos en el
def change
create_table :posts do |t|
generador
t.text :title
t.text :content Estos datos se crean
t.timestamps
automáticamente y
end corresponden a
end created_at y
end updated_at
Después corremos la migración con rails db:migrate

rails db:migrate
Ahora que ya tenemos
nuestro modelo y su controller
crearemos cada uno de los
métodos que utilizaremos
Para cada uno de los métodos

1. Agregar la ruta
2. Crear el controller (o utilizar uno existente)
3. Agregar la acción al controller
4. Crear la vista (o redireccionar) según corresponda
Crearemos el método INDEX
1) Agregamos la ruta

Agregando to: 'controller#acción' podemos personalizar mejor las rutas

Rails.application.routes.draw do
get 'posts', to: 'posts#index'
end
2) Creamos el controller o utilizamos uno existente

Ya creamos el controller posts y nuestra ruta apunta a este controller


3) Agregamos el método index

class PostsController < ApplicationController


def index
@posts = Post.all
end
end
4) Creamos la vista index

<% @posts.each do |post| %>


<%= post.title %>
<%= post.content %>
<% end %>
Creamos varios posts

En rails console

10.times { |i| Post.create(title: "Post#{i}", content: "Hola, soy el post


#{i} ") }
Crearemos el método NEW
1) La ruta

Rails.application.routes.draw do
get 'posts', to: 'posts#index'
get 'posts/new'
end
2) Creamos el controller o utilizamos uno existente

Ya creamos el controller posts y nuestra ruta apunta a este controller


3) Agregamos el método new

Esto puede ser raro, pero ahora vamos a utilizar @post en la vista

class PostsController < ApplicationController


def new
@post = Post.new
end
end
4) Creamos la vista

En la vista, @post que tiene el valor de Post.new, como este post todavía no persiste el formulario
apunta a /posts con el verbo post

<%= form_with(model: @post, local: true) do |f| %>


<%= f.label :title %>
<%= f.text_field :title %>

<%= f.label :content %>


<%= f.text_area :content %>

<%= f.submit :crear %>


<% end %>
Creamos el método CREATE
1) La ruta

Rails.application.routes.draw do
get 'posts', to: 'posts#index'
get 'posts/new'
post 'posts', to: 'posts#create'
end
2) Creamos el controller o utilizamos uno existente

Ya creamos el controller posts y nuestra ruta apunta a este controller


3) Agregamos el método create

Como ya sabemos, esto no funcionará...

def create
@post = Post.new(params[:post])
end
3.1) Agregamos los strong params

private
def post_params
params.require(:post).permit(:title, :content)
end
3.2) Guardamos el registro y redirigimos

def create
@post = Post.new(post_params)
@post.save
redirect_to posts_path
end
El método SHOW
1) Agregamos la ruta

Antes habíamos pasado datos a través de los query strings (lo que viene después de la URL), ahora
los pasaremos en la misma URL

get 'posts/:id', to: 'posts#show'


2) Creamos el controller o utilizamos uno existente

Ya creamos el controller posts y nuestra ruta apunta a este controller


3) Agregamos el método show al controller

@post = Post.find(params[:id])
4) Creamos la vista

<%= @post.title %>


<%= @post.content %>
www.desafiolatam.com

También podría gustarte