Ruby on Rails

Parte 3

Ejercicio

  1. Inicializar el proyecto
  2. Agregar modelos (Movie, Actor...)
  3. seed.rb
  4. Vistas, ABM
  5. Categorías
  6. ActiveStorage

Inicializar el proyecto

  $ rails new cinema -d postgresql --skip-coffee

agregar /config/database.yml a .gitignore

configurar y crear la DB

  $ rails db:create

Modelos

  $ rails g model Movie title rating:float awards:integer \
    released_at:date year:integer duration:integer category_id:integer

Agregamos las validaciones:

  • en la migración: t.string :title, null: false
  • en el modelo: validates :title, presence: true

Corremos las migraciones:

  $ rails db:migrate

Agregamos datos mediante seed.rb

def create_movie title, year, duration, category_id
  Movie.create(
    title: title,
    year: year,
    duration: duration,
    category_id: category_id
  )
end

Agregamos datos mediante seed.rb

create_movie('Avatar', 2009, 120, 5)
create_movie('Titanic', 1997, 320, 3)
create_movie('La Guerra de las galaxias: Episodio VI', 131, 5)
create_movie('Parque Jurasico', 270, 5)
create_movie('Harry Potter y la piedra filosofal', 152, 11)
create_movie('Harry Potter y la cámara de los secretos', 161, 11)
create_movie('El rey león', 1994, 88, 10)
create_movie('Toy Story', 1995, 81, 7)
create_movie('Inception', 2010, 148, 5)
Category = {
  1 => 'Comedia',
  2 => 'Terror',
  3 => 'Drama',
  4 => 'Accion',
  5 => 'Ciencia Ficcion',
  6 => 'Suspenso',
  7 => 'Animacion',
  8 => 'Aventuras',
  9 => 'Documental',
  10 => 'Infantiles',
  11 => 'Fantasia',
  12 => 'Musical'
}

def Category.to_options
  self.map{|k,v| [v,k]}
end

Vistas, ABM

Autenticación

Basic Authentication

class AdminController < ApplicationController
  http_basic_authenticate_with name: 'admin', password: 'password', except: :index

  def index
    render plain: "Esto es público"
  end
  def edit
    render plain: "Esto es privado"
  end
end

.env

Gemfile

gem 'dotenv-rails', groups: [:development, :test]

En el código

HOSTNAME = ENV['HOSTNAME']

Credentials

$ rails credentials:edit

# YAML
basic_auth:
  user: admin
  pass: password
  http_basic_authenticate_with(
    name: Rails.application.credentials.basic_auth[:user],
    password: Rails.application.credentials.basic_auth[:pass]
  )

ActiveStorage

$ rails active_storage:install

=> db/migrate/20190807050837_create_active_storage_tables.active_storage.rb