Está en la página 1de 25

Clase 6: Ms de Rails y

Music DB 1
Crear una nueva App
rails new
new_project

Deberas ver una serie de nuevos archivos y carpetas


recin creados
Esta es tu nueva aplicacin de rails! Veamos lo que cada
una de estas carpetas significa
Controladores
El directorio de los controladores contiene todos los controladores para nuestra
aplicacin
Application controller este es entregado por default
- Es el core de la aplicacin
- Nota que es una clase estructurada
Normalmente, todos nuestros controladores heredan de Application controller
(por eso llevan el < ApplicationController)
< ActionController::Base Recuerda los Ruby methods. Tambin los llamamos
acciones, o funciones-
- El Action Controller es el core de los requests web en Rails
- Ellos determinan si hacer render o redirect
- Actions, por defecto, muestran (render) un template en el directorio app/views
correspondiente al nombre del controlador y la accin despus de ejecutar
cdigo en la accin
Helpers
HELPERS - A medida que avanzamos y generamos las diferentes
partes de nuestra aplicacin (ej.: assets, fechas, formularios,
nmeros y objetos del modelo), cada pieza de cdigo en particular
que generemos obtendr su propio helper
Si es que queremos que algo aplique a todas nuestras diferentes
vistas pondremos eso en nuestro application helper
EN su mayora, los helpers sern utilizados para generar cdigo
para nuestras vistas
Rails sugiere usar los helpers para extraer lgica compleja o
reutilizar funcionalidades
Mailers
MAILERS te ayudan a crear mtodos de mailer y vistas
que correspondan con tu aplicacin
Heredan de ActionMailer::Base
Similares a los controladores, que general html, los mailers
generan vistas que son enviadas por correo electrnico
Models y Views
MODELS contienen todos nuestros diferentes modelos, definiendo la
estructura de la tabla de nuestros datos
El directorio Concerns contiene comportamiento compartido entre
modelos. Sirve para limpiar los modelos
Nota el uso de los application files que nos permiten usar un archivo
en lugar de muchos

VIEWS - Contiene los layouts de nuestra aplicacin. Rails genera un layout


por defecto para nosotros:
_form.html.erb
edit.html.erb
index.html.erb
new.html.erb
show.html.erb
Otros
TEST todas tus pruebas automatizadas
TMP almacena archivos temporales
VENDOR almacena assets necesitados por gemas
de terceros que agregas a tu aplicacin
Similar al directorio lib (pero este es para usar cdigo
de otras personas)
.GITIGNORE archivos que no sern trackeados con
git
GEMFILE donde todas las gemas son almacenadas
Music DB
Para empezar, construyamos una nueva aplicacin rails llamada
MusicDB

$ rails new MusicDB


Music DB - Qu har?
Con esta aplicacin queremos poder crear una base de datos de
canciones

Qu viene con las canciones? Un gnero y un lbum cierto?

Sera excelente si pudiramos crear el gnero una sola vez y


seleccionar del mismo. Lo mismo con el artista!
Cmo lo hacemos?
Usaremos algo que se llama Active Record Associations.
Miremos la documentacin existente:

http://guides.rubyonrails.org/association_basics.html

Usando estas asociaciones podemos linkear las tablas para


lograr que muchas funciones sean ms sencillas y dinmicas
Tipos de asociaciones
belongs_to
has_one
has_many
has_many :through
has_one :through
has_and_belongs_to_many
Modelo de Dominio
Queremos que se almacenen tres tipos de datos en nuestra base
de datos: Gnero, Artista y Cancin
Para esto, debemos crear un modelo para cada uno
Creando el modelo
$ rails g scaffold genre name:string
$ rails g scaffold artist name:string genre_id:integer
$ rails g scaffold song name:string genre_id: artist_id:integer

Tpicamente, agregaramos slo name, etc. Ahora estamos


seteando un nuevo campo para nuestros recursos de manera de
poder establecer relaciones entre ellos: xxxx_id
Asociaciones
Las asociaciones nos permiten llamar mtodos particulares a
travs de instancias de la clase (ej.: artist.genre)
- Cada artista tendr un gnero especfico al que se corresponde
- Cada cancin tendr un artista especfico al que se corresponde
- Cada gnero tendr un nombre. Agregaremos asociaciones
especficas despus
Migration
Asegrate de migrar los cambios a la base de datos

$ rake db:migrate

Ejecuta el servidor de rails

$ rails s
Agregando estilo
Anda al gemfile y agrega el gem llama starter_generators

gem 'starter_generators'

Luego ejecuta bundle install


bundle install

Y ejecuta el comando starter

rails g starter:style amelia


Starter: posible error
El starter_generators requiere un root path, por lo que hagamos
uno. En routes.rb:

root to: "artists#index"

Esto va a setear tu homepage o root path al index de Artists


Agregando las asociaciones
Agregamos las asociaciones entre los tipos de datos/ modelos en
el archivo del modelo respectivo:

has_many :songs
genre.rb
has_many :artists

belongs_to :genre
artist.rb
has_many :songs

belongs_to :artist
song.rb
belongs_to :genre
Agrega dato en cada tabla

Tmate tu tiempo
Pero espera
No queremos ver slo nmeros
Queremos poder ver el nombre del artista y del gnero y no slo
los ids
Para eso, anda a index.html.erb bajo artist y show.html.erb
En lugar de tener artist.genre_id cambia esto a artist.genre.name

Esto se puede lograr gracias a


belongs_to :genre y has_many :artists,
permitindonos usar mtodos que
contienen informacin
Cambia el Formulario
Cambiar el form permite que cuando se cree un nuevo artista, podamos
seleccionar un gnero dentro de una lista de nombres y no de ids
En el _form.html.erb reemplacemos el campo genre por este cdigo

<div class=field>
<%= f.label :genre_id %><br />
<%= f.collection_select :genre_id,
@genres, :id, :name %>
</div>

Esto crea un dropdown


En el controller
Para que todo esto funcione, nota que hay una variable @genre siendo
llamada que debe ser definida en el mismo controlador

Anda a artist_controller.rb y bajo las acciones new y edit escribe este


cdigo

@genres = Genre.all

Esto crea un dropdown


Ejercicio/Tarea #1
Instrucciones:

Haz lo mismo que acabas de hacer, pero ahora para las


canciones
Heroku
Heroku es una plataforma como servicio de computacin en la
Nube que soporta distintos lenguajes de programacin.

Heroku, es una de las primeras plataformas de computacin en


la nube, que fue desarrollada desde junio de 2007, con el
objetivo de soportar solamente el lenguaje de programacin
Ruby, pero posteriormente se ha extendido el soporte a Java,
Node.js, Scala, Clojure y Python y PHP.

https://devcenter.heroku.com/articles/getting-started-with-ruby#introduction
Clase 6: Ms de Rails y
Music DB 1

También podría gustarte