Skip to content

Instantly share code, notes, and snippets.

@aduartem
Last active February 21, 2016 21:37
Show Gist options
  • Save aduartem/39293968aff5eab01961 to your computer and use it in GitHub Desktop.
Save aduartem/39293968aff5eab01961 to your computer and use it in GitHub Desktop.
Tutorial de Ruby on Rails

Ruby on Rails 4

Primera aplicación

$ cd dev/ruby/rortutorials/

Creamos el proyecto con el siguiente comando:

$ rails new MiPrimerApp

luego ingresamos al directorio raiz del proyecto.

$ cd MiPrimerApp

E iniciamos el servidor web con el siguiente comando:

$ rails server

ó también podemos escribir

$ rails s

De esta forma cargamos la aplicación para verla en el navegador, generalmente por defecto en el puerto 3000 de localhost (localhost:3000)

Ctrl+C para apagar el server.

Si ingresamos "localhost:3000" (sin las comillas) en la barra de direcciones del navegador visualizaremos la aplicación.

Ahora vamos a crear un controlador que se va a llamar "Welcome" y que va a tener un método que se llamará "index":

rails generate controller welcome index

output:

Running via Spring preloader in process 7717
      create  app/controllers/welcome_controller.rb
       route  get 'welcome/index'
      invoke  erb
      create    app/views/welcome
      create    app/views/welcome/index.html.erb
      invoke  test_unit
      create    test/controllers/welcome_controller_test.rb
      invoke  helper
      create    app/helpers/welcome_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/welcome.coffee
      invoke    scss
      create      app/assets/stylesheets/welcome.scss

Ahora si ingresamos a http://localhost:3000/welcome/index

Veremos una nueva página con el siguiente contenido:

Welcome#index

Find me in app/views/welcome/index.html.erb

Ahora vamos a editar el archivo index.html.erb que se encuentra en app/views/welcome/ y reemplazaremos todo su contenido por la siguiente línea:

<h2>Hello World</h2>

Si en el navegador vamos nuevamente a http://localhost:3000/welcome/index veremos que cambio el contenido de la página por "Hello World".

Modelos

El nombre de modelo debe ser el singular del nombre de la tabla. Por ejemplo si un modelo se llama Article, el nombre de la tabla va a ser Articles en plural. Se recomienda escribir estos nombre en inglés por que rails puede obtener el plural o el singular de palabras en inglés.

$ rails generate model Article title body:text visits_count:integer

En el campo title será un string, cuando no especificas el tipo de dato, rails asume que el tipo de dato del campo será un string.

output:

Running via Spring preloader in process 11964
      invoke  active_record
      create    db/migrate/20160221035559_create_articles.rb
      create    app/models/article.rb
      invoke    test_unit
      create      test/models/article_test.rb
      create      test/fixtures/articles.yml

Finalizado el proceso, este genero automáticamente varios archivos, por ejemplo podemos encontrar el archivo db/migrate/20160221035559_create_articles.rb donde este tendrá el siguiente contenido:

class CreateArticles < ActiveRecord::Migration
  def change
    create_table :articles do |t|
      t.string :title
      t.text :body
      t.integer :visits_count

      t.timestamps null: false
    end
  end
end

También podemos encontrar el modelo Article que se encuentra en app/models y su contenido es el siguiente:

class Article < ActiveRecord::Base
end

Bases de Datos y Migraciones

Migration

Migration se utiliza para crear el esquema de la base de datos (tablas, campos, etc) sin necesidad de escribir sql. Para realizar una migración ingresamos el siguiente comando:

$ rake db:migrate

output:

== 20160221035559 CreateArticles: migrating ===================================
-- create_table(:articles)
   -> 0.0016s
== 20160221035559 CreateArticles: migrated (0.0017s) ==========================

Rollback

Si queremos volver a la version anterior del migration existe un método que se llama rollback, que hace lo opuesto a lo que hace el método change. Para hacer rollback ejecutamos el siguiente comando:

$ rake db:rollback

output:

== 20160221035559 CreateArticles: reverting ===================================
-- drop_table(:articles)
   -> 0.0004s
== 20160221035559 CreateArticles: reverted (0.0199s) ==========================

La consola de Rails

La consola de rails permite utilizar métodos de rails y de la aplicación. Para abrir la consola ejecutar:

$ rails console
Running via Spring preloader in process 12182
Loading development environment (Rails 4.2.5)
irb(main):001:0> Article.all
  Article Load (0.7ms)  SELECT "articles".* FROM "articles"
=> #<ActiveRecord::Relation []>
irb(main):002:0> Article.find(1)
  Article Load (0.2ms)  SELECT  "articles".* FROM "articles" WHERE "articles"."id" = ? LIMIT 1  [["id", 1]]
ActiveRecord::RecordNotFound: Couldn't find Article with 'id'=1

Controladores

Vamos a crear un controlador manualmente. En la carpeta app/controllers creamos un archivo llamado "articles_controller.rb". Si trabajamos con sublime text podemos escribir "cl" y aparecer un dropdown autocompletar, seleccionamos la segunda opción, Create controller class (Crear una clase controlador). Luego modificamos el código:

class ArticlesController < ApplicationController
  
  #GET /articles
  def index
    @articles = Article.all
  end
end

Creamos el método index y dentro de él se invoca el método all del modelo Article, este retorna un objeto que se asigna a la variable @articles que es una variable de clase y nos permitirá pasar los datos a la vista. Podemos ver que ArticlesController hereda de ApplicationController que se encuentra en app/controller/application_controller.rb.

La variable @articles será accesible tanto en la vista como en el controlador. Las variables que no comienzan con el "@" sólo son accesibles dentro del controlador.

Una vez creado el método index debemos crear su respectiva vista. En app/views creamos la carpeta articles y dentro de esta carpeta creamos la vista "index.html.erb" con el siguiente contenido:

<%= @articles.inspect %>

inspect es un método de ruby para inspeccionar un objeto.

En la terminal ejecutamos rails console.

$ rails console

> Article.all

output:

  Article Load (0.9ms)  SELECT "articles".* FROM "articles"
=> #<ActiveRecord::Relation []>

La tabla no tiene registros así que crearemos el primer artículo ingresando lo siguiente:

> Article.create(title:"Primer articulo", body: "Bienvenidos a mi blog", "visits_count": 0)

output:

   (0.1ms)  begin transaction
  SQL (0.3ms)  INSERT INTO "articles" ("title", "body", "visits_count", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?)  [["title", "Primer articulo"], ["body", "Bienvenidos a mi blog"], ["visits_count", 0], ["created_at", "2016-02-21 18:48:57.128831"], ["updated_at", "2016-02-21 18:48:57.128831"]]
   (157.9ms)  commit transaction
=> #<Article id: 1, title: "Primer articulo", body: "Bienvenidos a mi blog", visits_count: 0, created_at: "2016-02-21 18:48:57", updated_at: "2016-02-21 18:48:57">

Ahora si visitamos la página http://localhost:3000/articles veremos lo siguiente:

#<ActiveRecord::Relation [#<Article id: 1, title: "Primer articulo", body: "Bienvenidos a mi blog", visits_count: 0, created_at: "2016-02-21 18:48:57", updated_at: "2016-02-21 18:48:57">]>

Scaffolding

1.- Crear un proyecto:

$ rails new mi_proyecto

2.- Ubicarse en el directorio recien creado

$ cd mi_proyecto

3.- Crear una tabla persona

$ rails g scaffold persona nombre:string direccion:string telefono:string fechadeEntrada:date

output:

Running via Spring preloader in process 8241
      invoke  active_record
      create    db/migrate/20160220200743_create_personas.rb
      create    app/models/persona.rb
      invoke    test_unit
      create      test/models/persona_test.rb
      create      test/fixtures/personas.yml
      invoke  resource_route
       route    resources :personas
      invoke  scaffold_controller
      create    app/controllers/personas_controller.rb
      invoke    erb
      create      app/views/personas
      create      app/views/personas/index.html.erb
      create      app/views/personas/edit.html.erb
      create      app/views/personas/show.html.erb
      create      app/views/personas/new.html.erb
      create      app/views/personas/_form.html.erb
      invoke    test_unit
      create      test/controllers/personas_controller_test.rb
      invoke    helper
      create      app/helpers/personas_helper.rb
      invoke      test_unit
      invoke    jbuilder
      create      app/views/personas/index.json.jbuilder
      create      app/views/personas/show.json.jbuilder
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/personas.coffee
      invoke    scss
      create      app/assets/stylesheets/personas.scss
      invoke  scss
      create    app/assets/stylesheets/scaffolds.scss

4.- Migrar

$ rake db:migrate

output:

== 20160220200743 CreatePersonas: migrating ===================================
-- create_table(:personas)
   -> 0.0009s
== 20160220200743 CreatePersonas: migrated (0.0010s) ==========================

5.- Desde la terminal ejecutar el servidor web.

$ rails s

6.- Desde el navegador ingresar a http://localhost:3000/personas

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment