SlideShare una empresa de Scribd logo
2ª Parte



Javier Cuevas - Diacode.com
Menú del día

• Repaso a generadores y aclaraciones sobre
  Scaffolding
• AJAX con Rails
• Autentificación de usuarios con Devise
• Resolución del ejercicio propuesto
Repaso a generadores y
  aclaraciones sobre
      Scaffolding
Para tener un CRUD de un
   modelo necesitamos:
• Modelo
• Controlador
• Vistas
• Tabla en la base de datos (migración)
• Rutas configuradas (routes.rb)
Para tener un CRUD de un
   modelo necesitamos:
• Modelo                    Todo esto nos
                               lo ofrece
• Controlador                 el scaffold
• Vistas
• Tabla en la base de datos (migración)
• Rutas configuradas (routes.rb)
El Scaffold además...
rails g scaffold Task   invoke   active_record
                        create     db/migrate/20120224135839_create_tasks.rb
name:string             create     app/models/task.rb
description:text        invoke     test_unit
priority:integer        create        test/unit/task_test.rb
                        create        test/fixtures/tasks.yml
due_to:date              route   resources :tasks
done:boolean            invoke   scaffold_controller
                        create     app/controllers/tasks_controller.rb
category:references     invoke     erb
                        create        app/views/tasks
                        create        app/views/tasks/index.html.erb
                        create        app/views/tasks/edit.html.erb
                        create        app/views/tasks/show.html.erb
                        create        app/views/tasks/new.html.erb
                        create        app/views/tasks/_form.html.erb
                        invoke     test_unit
                        create        test/functional/tasks_controller_test.rb
                        invoke     helper
                        create        app/helpers/tasks_helper.rb
                        invoke        test_unit
                        create          test/unit/helpers/tasks_helper_test.rb
                        invoke   assets
                        invoke     coffee
                        create        app/assets/javascripts/tasks.js.coffee
                        invoke     scss
                        create        app/assets/stylesheets/tasks.css.scss
                        invoke   scss
                        create     app/assets/stylesheets/scaffolds.css.scss
El Scaffold además...
rails g scaffold Task   invoke   active_record
                        create     db/migrate/20120224135839_create_tasks.rb
name:string             create     app/models/task.rb
description:text        invoke     test_unit
priority:integer        create        test/unit/task_test.rb
                        create        test/fixtures/tasks.yml
due_to:date              route   resources :tasks
done:boolean            invoke   scaffold_controller
                        create     app/controllers/tasks_controller.rb
category:references     invoke     erb
                        create        app/views/tasks
                        create        app/views/tasks/index.html.erb

    Genera              create
                        create
                        create
                                      app/views/tasks/edit.html.erb
                                      app/views/tasks/show.html.erb
                                      app/views/tasks/new.html.erb

 CSS (SCSS),            create
                        invoke
                        create
                                      app/views/tasks/_form.html.erb
                                   test_unit
                                      test/functional/tasks_controller_test.rb

  Javascript            invoke
                        create
                        invoke
                                   helper
                                      app/helpers/tasks_helper.rb
                                      test_unit

   (Coffee),            create
                        invoke
                        invoke
                                 assets
                                        test/unit/helpers/tasks_helper_test.rb

                                   coffee

 Helpers, y             create
                        invoke
                        create
                                      app/assets/javascripts/tasks.js.coffee
                                   scss
                                      app/assets/stylesheets/tasks.css.scss

     Tests              invoke
                        create
                                 scss
                                   app/assets/stylesheets/scaffolds.css.scss
El Scaffold NO hace...
• No incluye selects para relacionar modelos
  en los formularios que crea.
• Si hiciste scaffold, y posteriormente incluyes
  un campo nuevo a la tabla de tu modelo, las
  vistas no se actualizan solas: tendrás que
  actualizarlas tú.
• Si añades nuevas acciones a tu controlador,
  tendrás que incluirlas en el routes.rb. El
  scaffold solo define rutas para el CRUD.
Montando un CRUD
        SIN Scaffold
•   Modelo y Tabla (migración)
    rails g model User name:string
    rake db:migrate


•   Modelo sin Tabla (migración)
    rails g model User name:string --migrations false


•   Controlador
    rails g controller User
    tip:   rails g controller --help



•   Tendremos que añadir las acciones CRUD (index, show,
    edit, create, update, destroy) al controlador a mano

•   Las vistas las creamos a mano desde nuestro editor

•   Tendremos que editar el routes.rb y añadir rutas CRUD
    (resources :users) o rutas propias
AJAX
con Rails
Algunas notas sobre
      Rails y Javascript
• Rails es Javascript framework agnostic, es
  decir, que puede integrarse tanto con jQuery
  como con Prototype, etc.
• Para integrar Rails con cada framework se
  usan “adaptadores”.
• Por defecto Rails añade al Gemfile el
  adaptador jquery-rails. Es decir: sin hacer
  nada, podemos empezar a usar jQuery.
Generar petición AJAX
      con Rails
<%= link_to 'Destroy', task, confirm: 'Are you sure?',
method: :delete, :remote => true %>



  <%= form_for(@task, :remote => true) do |f| %>
Generar petición AJAX
      con Rails
<%= link_to 'Destroy', task, confirm: 'Are you sure?',
method: :delete, :remote => true %>



  <%= form_for(@task, :remote => true) do |f| %>


           Por defecto estas
          peticiones esperan
            recibir código
               Javascript
¿Qué debe devolver la
   petición AJAX?
• Una petición AJAX puede devolver
  diferentes tipos de datos:
  • Código Javascript
  • JSON
  • JSONP (llamada a función JS + datos JSON)
  • Texto
  • HTML
¿Qué debe devolver la
   petición AJAX?
• Una petición AJAX puede devolver
  diferentes tipos de datos:
  • Código Javascript          Normalmente
                                usaremos
  • JSON                        estos dos
  • JSONP (llamada a función JS + datos JSON)
  • Texto
  • HTML
Javascript VS JSON
Javascript VS JSON
•   Devolver Javascript
Javascript VS JSON
• Devolver Javascript
• A cada petición AJAXbloque de
  contestamos con un
   código Javascript, resultante de
   interpretar un archivo .js.erb
Javascript VS JSON
• Devolver Javascript
• A cada petición AJAXbloque de
  contestamos con un
    código Javascript, resultante de
    interpretar un archivo .js.erb
•   Los archivos .js.erb mezclan JS y
    Ruby.
Javascript VS JSON
• Devolver Javascript
• A cada petición AJAXbloque de
  contestamos con un
   código Javascript, resultante de
   interpretar un archivo .js.erb
•  Los archivos .js.erb mezclan JS y
   Ruby.
• Se almacenan en la carpeta
  app/views
Javascript VS JSON
• Devolver Javascript
• A cada petición AJAXbloque de
  contestamos con un
   código Javascript, resultante de
   interpretar un archivo .js.erb
•  Los archivos .js.erb mezclan JS y
   Ruby.
• Se almacenan en la carpeta
  app/views
• Insertandorenderizar vistas,
  podemos:
             código ERB:

   usar helpers, iterar con Ruby,
   etc.
Javascript VS JSON
• Devolver Javascript
• A cada petición AJAXbloque de
  contestamos con un
    código Javascript, resultante de
    interpretar un archivo .js.erb
•   Los archivos .js.erb mezclan JS y
    Ruby.
• Se almacenan en la carpeta
  app/views
• Insertandorenderizar vistas,
  podemos:
             código ERB:

    usar helpers, iterar con Ruby,
    etc.
•   Tardan un poco más en ser
    ejecutados por el navegador.
Javascript VS JSON
• Devolver Javascript                   •   Devolver JSON
• A cada petición AJAXbloque de
  contestamos con un
    código Javascript, resultante de
    interpretar un archivo .js.erb
•   Los archivos .js.erb mezclan JS y
    Ruby.
• Se almacenan en la carpeta
  app/views
• Insertandorenderizar vistas,
  podemos:
             código ERB:

    usar helpers, iterar con Ruby,
    etc.
•   Tardan un poco más en ser
    ejecutados por el navegador.
Javascript VS JSON
• Devolver Javascript                   •   Devolver JSON
• A cada petición AJAXbloque de
  contestamos con un
                                        • En un archivo .js normal, con
                                          jQuery escucharemos los
    código Javascript, resultante de        eventos Ajax (success, error,
    interpretar un archivo .js.erb          etc).
•   Los archivos .js.erb mezclan JS y
    Ruby.
• Se almacenan en la carpeta
  app/views
• Insertandorenderizar vistas,
  podemos:
             código ERB:

    usar helpers, iterar con Ruby,
    etc.
•   Tardan un poco más en ser
    ejecutados por el navegador.
Javascript VS JSON
• Devolver Javascript                   •   Devolver JSON
• A cada petición AJAXbloque de
  contestamos con un
                                        • En un archivo .js normal, con
                                          jQuery escucharemos los
    código Javascript, resultante de        eventos Ajax (success, error,
    interpretar un archivo .js.erb          etc).
•   Los archivos .js.erb mezclan JS y
    Ruby.                               •   El controlador Rails
                                            codificará los datos en
• Se almacenan en la carpeta
  app/views
                                            JSON
                                            render json: @task

• Insertandorenderizar vistas,
  podemos:
             código ERB:

    usar helpers, iterar con Ruby,
    etc.
•   Tardan un poco más en ser
    ejecutados por el navegador.
Javascript VS JSON
• Devolver Javascript                   •   Devolver JSON
• A cada petición AJAXbloque de
  contestamos con un
                                        • En un archivo .js normal, con
                                          jQuery escucharemos los
    código Javascript, resultante de        eventos Ajax (success, error,
    interpretar un archivo .js.erb          etc).
•   Los archivos .js.erb mezclan JS y
    Ruby.                               •   El controlador Rails
                                            codificará los datos en
• Se almacenan en la carpeta
  app/views
                                            JSON
                                            render json: @task

• Insertandorenderizar vistas,
  podemos:
             código ERB:                • La función de archivo .js
                                                        callback
                                          definida en el
    usar helpers, iterar con Ruby,          normal recibirá los datos
    etc.                                    JSON y hará algo con ellos.
•   Tardan un poco más en ser
    ejecutados por el navegador.
Devolviendo Javascript
         con Rails
En nuestro controlador:
  def create
    @task = Task.new(params[:task])

    respond_to do |format|
      if @task.save
        format.html { redirect_to @task, notice: 'Task was successfully created.' }
        format.js # Por defecto buscará create.js.erb
      else
        format.html { render action: "new" }
        format.js # Por defecto buscará create.js.erb
      end
    end
  end


Vista
$('ul[data-category_id='+<%= @task.category_id %>+']').append('<li><%= escape_javascript
render("header_task", :task => @task) %></li>');
Autentificación de Usuarios con

          Devise
     https://github.com/plataformatec/devise
Resolución del
ejercicio propuesto
Eso es todo :)
   Gracias!

Más contenido relacionado

La actualidad más candente

7 Gemas de Ruby on Rails que podrían salvarte el dia
7 Gemas de Ruby on Rails que podrían salvarte el dia7 Gemas de Ruby on Rails que podrían salvarte el dia
7 Gemas de Ruby on Rails que podrían salvarte el dia
Francisco Aranda
 
Hola RoR
Hola RoRHola RoR
Creación de plugins con Grails
Creación de plugins con GrailsCreación de plugins con Grails
Creación de plugins con Grails
Jose Juan R. Zuñiga
 
Workshop 7: Single Page Applications
Workshop 7: Single Page ApplicationsWorkshop 7: Single Page Applications
Workshop 7: Single Page Applications
Visual Engineering
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on rails
pelusa
 
Por qué Symfony2 es tan rápido
Por qué Symfony2 es tan rápidoPor qué Symfony2 es tan rápido
Por qué Symfony2 es tan rápido
Carlos Granados
 
Ruby on Rails - ETyC 2011
Ruby on Rails - ETyC 2011Ruby on Rails - ETyC 2011
Ruby on Rails - ETyC 2011
Rafael Franco
 
Curso TDD Ruby on Rails #02: Test Driven Development
Curso TDD  Ruby on Rails #02: Test Driven DevelopmentCurso TDD  Ruby on Rails #02: Test Driven Development
Curso TDD Ruby on Rails #02: Test Driven Development
Alberto Perdomo
 
Programación Reactiva, Javascript Isomorfo y Meteorjs !
Programación Reactiva, Javascript Isomorfo y Meteorjs !Programación Reactiva, Javascript Isomorfo y Meteorjs !
Programación Reactiva, Javascript Isomorfo y Meteorjs !
ouuyeah
 
Introducción a Angular
Introducción a AngularIntroducción a Angular
Introducción a Angular
Pedro J. Molina
 
React
ReactReact
Gwt III - Avanzado
Gwt III - AvanzadoGwt III - Avanzado
Gwt III - Avanzado
Manuel Carrasco Moñino
 
Rails intro
Rails introRails intro
Rails intro
Miguel Fernández
 
Creación de Builders y DSL's con Groovy
Creación de Builders y DSL's con GroovyCreación de Builders y DSL's con Groovy
Creación de Builders y DSL's con Groovy
Jose Juan R. Zuñiga
 
[ES] Introdución al desarrollo de aplicaciones web en java
[ES] Introdución al desarrollo de aplicaciones  web en java[ES] Introdución al desarrollo de aplicaciones  web en java
[ES] Introdución al desarrollo de aplicaciones web en java
Eudris Cabrera
 

La actualidad más candente (16)

7 Gemas de Ruby on Rails que podrían salvarte el dia
7 Gemas de Ruby on Rails que podrían salvarte el dia7 Gemas de Ruby on Rails que podrían salvarte el dia
7 Gemas de Ruby on Rails que podrían salvarte el dia
 
Hola RoR
Hola RoRHola RoR
Hola RoR
 
Creación de plugins con Grails
Creación de plugins con GrailsCreación de plugins con Grails
Creación de plugins con Grails
 
Workshop 7: Single Page Applications
Workshop 7: Single Page ApplicationsWorkshop 7: Single Page Applications
Workshop 7: Single Page Applications
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on rails
 
Por qué Symfony2 es tan rápido
Por qué Symfony2 es tan rápidoPor qué Symfony2 es tan rápido
Por qué Symfony2 es tan rápido
 
Ruby on Rails - ETyC 2011
Ruby on Rails - ETyC 2011Ruby on Rails - ETyC 2011
Ruby on Rails - ETyC 2011
 
Java script
Java scriptJava script
Java script
 
Curso TDD Ruby on Rails #02: Test Driven Development
Curso TDD  Ruby on Rails #02: Test Driven DevelopmentCurso TDD  Ruby on Rails #02: Test Driven Development
Curso TDD Ruby on Rails #02: Test Driven Development
 
Programación Reactiva, Javascript Isomorfo y Meteorjs !
Programación Reactiva, Javascript Isomorfo y Meteorjs !Programación Reactiva, Javascript Isomorfo y Meteorjs !
Programación Reactiva, Javascript Isomorfo y Meteorjs !
 
Introducción a Angular
Introducción a AngularIntroducción a Angular
Introducción a Angular
 
React
ReactReact
React
 
Gwt III - Avanzado
Gwt III - AvanzadoGwt III - Avanzado
Gwt III - Avanzado
 
Rails intro
Rails introRails intro
Rails intro
 
Creación de Builders y DSL's con Groovy
Creación de Builders y DSL's con GroovyCreación de Builders y DSL's con Groovy
Creación de Builders y DSL's con Groovy
 
[ES] Introdución al desarrollo de aplicaciones web en java
[ES] Introdución al desarrollo de aplicaciones  web en java[ES] Introdución al desarrollo de aplicaciones  web en java
[ES] Introdución al desarrollo de aplicaciones web en java
 

Similar a Taller de Introducción a Ruby on Rails (2ª parte)

Taller backbone.js - Betabeers Córdoba (18/10/2012)
Taller backbone.js - Betabeers Córdoba (18/10/2012)Taller backbone.js - Betabeers Córdoba (18/10/2012)
Taller backbone.js - Betabeers Córdoba (18/10/2012)
betabeers
 
Conferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y RailsConferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y RailsDavid Calavera
 
Desarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsDesarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on Rails
Freelancer
 
Programa en Rails como si Jugases con Lego. Javier Ramirez
Programa en Rails como si Jugases con Lego. Javier RamirezPrograma en Rails como si Jugases con Lego. Javier Ramirez
Programa en Rails como si Jugases con Lego. Javier Ramirez
javier ramirez
 
Javier Ramirez Rails Plugins Pdf
Javier Ramirez Rails Plugins PdfJavier Ramirez Rails Plugins Pdf
Javier Ramirez Rails Plugins Pdf
javier ramirez
 
Rails Plugins. Javier Ramirez
Rails Plugins. Javier RamirezRails Plugins. Javier Ramirez
Rails Plugins. Javier Ramirez
javier ramirez
 
Ruby On Rails Intro
Ruby On Rails IntroRuby On Rails Intro
Ruby On Rails Intro
ThirdWay
 
Aprendiendo AWS Lambda con API Gateway y DynamoDB
Aprendiendo AWS Lambda con API Gateway y DynamoDBAprendiendo AWS Lambda con API Gateway y DynamoDB
Aprendiendo AWS Lambda con API Gateway y DynamoDB
Abimael Desales López
 
Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009
Nelson Rojas Núñez
 
JavaServer Page
JavaServer PageJavaServer Page
Introducción a Kohana Framework
Introducción a Kohana FrameworkIntroducción a Kohana Framework
Introducción a Kohana Framework
Jorge Iván Meza Martínez
 
Java Web Lección 02 - JSP
Java Web Lección 02 - JSPJava Web Lección 02 - JSP
Java Web Lección 02 - JSP
Eric Gustavo Coronel Castillo
 
introduccion-a-las-aplicaciones-web-y-tecnologia-java.ppt
introduccion-a-las-aplicaciones-web-y-tecnologia-java.pptintroduccion-a-las-aplicaciones-web-y-tecnologia-java.ppt
introduccion-a-las-aplicaciones-web-y-tecnologia-java.ppt
BYRONMIGUELSUBUYUCPA
 
SEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVC
SEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVCSEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVC
SEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVC
Paradigma Digital
 
Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJS
BEEVA_es
 
Taller de Backbone.js en Betabeers Malaga 06/09/2012
Taller de Backbone.js en Betabeers Malaga 06/09/2012Taller de Backbone.js en Betabeers Malaga 06/09/2012
Taller de Backbone.js en Betabeers Malaga 06/09/2012
Damian Serrano Thode
 

Similar a Taller de Introducción a Ruby on Rails (2ª parte) (20)

Taller backbone.js - Betabeers Córdoba (18/10/2012)
Taller backbone.js - Betabeers Córdoba (18/10/2012)Taller backbone.js - Betabeers Córdoba (18/10/2012)
Taller backbone.js - Betabeers Córdoba (18/10/2012)
 
Conferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y RailsConferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y Rails
 
Desarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsDesarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on Rails
 
Programa en Rails como si Jugases con Lego. Javier Ramirez
Programa en Rails como si Jugases con Lego. Javier RamirezPrograma en Rails como si Jugases con Lego. Javier Ramirez
Programa en Rails como si Jugases con Lego. Javier Ramirez
 
Javier Ramirez Rails Plugins Pdf
Javier Ramirez Rails Plugins PdfJavier Ramirez Rails Plugins Pdf
Javier Ramirez Rails Plugins Pdf
 
Rails Plugins. Javier Ramirez
Rails Plugins. Javier RamirezRails Plugins. Javier Ramirez
Rails Plugins. Javier Ramirez
 
Ruby On Rails Intro
Ruby On Rails IntroRuby On Rails Intro
Ruby On Rails Intro
 
Aprendiendo AWS Lambda con API Gateway y DynamoDB
Aprendiendo AWS Lambda con API Gateway y DynamoDBAprendiendo AWS Lambda con API Gateway y DynamoDB
Aprendiendo AWS Lambda con API Gateway y DynamoDB
 
Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009
 
JavaServer Page
JavaServer PageJavaServer Page
JavaServer Page
 
Introducción a Kohana Framework
Introducción a Kohana FrameworkIntroducción a Kohana Framework
Introducción a Kohana Framework
 
Java Web Lección 02 - JSP
Java Web Lección 02 - JSPJava Web Lección 02 - JSP
Java Web Lección 02 - JSP
 
Charla
CharlaCharla
Charla
 
Angular js in mobile
Angular js in mobileAngular js in mobile
Angular js in mobile
 
introduccion-a-las-aplicaciones-web-y-tecnologia-java.ppt
introduccion-a-las-aplicaciones-web-y-tecnologia-java.pptintroduccion-a-las-aplicaciones-web-y-tecnologia-java.ppt
introduccion-a-las-aplicaciones-web-y-tecnologia-java.ppt
 
SEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVC
SEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVCSEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVC
SEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVC
 
Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJS
 
06. jsf (java server faces) (1)
06. jsf (java server faces) (1)06. jsf (java server faces) (1)
06. jsf (java server faces) (1)
 
Desarrollo web
Desarrollo webDesarrollo web
Desarrollo web
 
Taller de Backbone.js en Betabeers Malaga 06/09/2012
Taller de Backbone.js en Betabeers Malaga 06/09/2012Taller de Backbone.js en Betabeers Malaga 06/09/2012
Taller de Backbone.js en Betabeers Malaga 06/09/2012
 

Más de Diacode

CI/CD with Kubernetes, Helm & Wercker (#madScalability)
CI/CD with Kubernetes, Helm & Wercker (#madScalability)CI/CD with Kubernetes, Helm & Wercker (#madScalability)
CI/CD with Kubernetes, Helm & Wercker (#madScalability)
Diacode
 
Phoenix for Rails Devs
Phoenix for Rails DevsPhoenix for Rails Devs
Phoenix for Rails Devs
Diacode
 
Introduction to Elixir
Introduction to ElixirIntroduction to Elixir
Introduction to Elixir
Diacode
 
Startup nomads
Startup nomadsStartup nomads
Startup nomads
Diacode
 
Ruby on Rails & TDD con RSpec
Ruby on Rails & TDD con RSpecRuby on Rails & TDD con RSpec
Ruby on Rails & TDD con RSpec
Diacode
 
Hacking your bank with Ruby and reverse engineering (Madrid.rb)
Hacking your bank with Ruby and reverse engineering (Madrid.rb)Hacking your bank with Ruby and reverse engineering (Madrid.rb)
Hacking your bank with Ruby and reverse engineering (Madrid.rb)
Diacode
 
TLKR.io @ Betabeers Madrid
TLKR.io @ Betabeers MadridTLKR.io @ Betabeers Madrid
TLKR.io @ Betabeers Madrid
Diacode
 
Métricas para hacer crecer tu proyecto
Métricas para hacer crecer tu proyectoMétricas para hacer crecer tu proyecto
Métricas para hacer crecer tu proyecto
Diacode
 
Métricas para hacer crecer tu proyecto
Métricas para hacer crecer tu proyectoMétricas para hacer crecer tu proyecto
Métricas para hacer crecer tu proyecto
Diacode
 
Presentación de Kogi
Presentación de KogiPresentación de Kogi
Presentación de KogiDiacode
 
Educación: The Next Big Thing
Educación: The Next Big ThingEducación: The Next Big Thing
Educación: The Next Big Thing
Diacode
 
Front-End Frameworks: a quick overview
Front-End Frameworks: a quick overviewFront-End Frameworks: a quick overview
Front-End Frameworks: a quick overview
Diacode
 

Más de Diacode (12)

CI/CD with Kubernetes, Helm & Wercker (#madScalability)
CI/CD with Kubernetes, Helm & Wercker (#madScalability)CI/CD with Kubernetes, Helm & Wercker (#madScalability)
CI/CD with Kubernetes, Helm & Wercker (#madScalability)
 
Phoenix for Rails Devs
Phoenix for Rails DevsPhoenix for Rails Devs
Phoenix for Rails Devs
 
Introduction to Elixir
Introduction to ElixirIntroduction to Elixir
Introduction to Elixir
 
Startup nomads
Startup nomadsStartup nomads
Startup nomads
 
Ruby on Rails & TDD con RSpec
Ruby on Rails & TDD con RSpecRuby on Rails & TDD con RSpec
Ruby on Rails & TDD con RSpec
 
Hacking your bank with Ruby and reverse engineering (Madrid.rb)
Hacking your bank with Ruby and reverse engineering (Madrid.rb)Hacking your bank with Ruby and reverse engineering (Madrid.rb)
Hacking your bank with Ruby and reverse engineering (Madrid.rb)
 
TLKR.io @ Betabeers Madrid
TLKR.io @ Betabeers MadridTLKR.io @ Betabeers Madrid
TLKR.io @ Betabeers Madrid
 
Métricas para hacer crecer tu proyecto
Métricas para hacer crecer tu proyectoMétricas para hacer crecer tu proyecto
Métricas para hacer crecer tu proyecto
 
Métricas para hacer crecer tu proyecto
Métricas para hacer crecer tu proyectoMétricas para hacer crecer tu proyecto
Métricas para hacer crecer tu proyecto
 
Presentación de Kogi
Presentación de KogiPresentación de Kogi
Presentación de Kogi
 
Educación: The Next Big Thing
Educación: The Next Big ThingEducación: The Next Big Thing
Educación: The Next Big Thing
 
Front-End Frameworks: a quick overview
Front-End Frameworks: a quick overviewFront-End Frameworks: a quick overview
Front-End Frameworks: a quick overview
 

Último

Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
ItsSofi
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
marianabz2403
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
zoecaicedosalazar
 
Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5
JulyMuoz18
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
thomasdcroz38
 
Ventajas y desventajas de la desinfección con cloro
Ventajas y desventajas de la desinfección con cloroVentajas y desventajas de la desinfección con cloro
Ventajas y desventajas de la desinfección con cloro
durangense277
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
vazquezgarciajesusma
 
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Telefónica
 
biogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectosbiogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectos
Luis Enrique Zafra Haro
 
EduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clasesEduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clases
PABLOCESARGARZONBENI
 
Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.
AlejandraCasallas7
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
vazquezgarciajesusma
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
coloradxmaria
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
CrystalRomero18
 
Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
ValeriaAyala48
 
Inteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdfInteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdf
Emilio Casbas
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
cofferub
 
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
sarasofiamontezuma
 
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
espinozaernesto427
 
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptxleidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
Leidyfuentes19
 

Último (20)

Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
 
Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
Ventajas y desventajas de la desinfección con cloro
Ventajas y desventajas de la desinfección con cloroVentajas y desventajas de la desinfección con cloro
Ventajas y desventajas de la desinfección con cloro
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
 
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
 
biogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectosbiogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectos
 
EduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clasesEduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clases
 
Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
 
Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
 
Inteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdfInteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdf
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
 
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
 
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptxleidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
 

Taller de Introducción a Ruby on Rails (2ª parte)

  • 1. 2ª Parte Javier Cuevas - Diacode.com
  • 2. Menú del día • Repaso a generadores y aclaraciones sobre Scaffolding • AJAX con Rails • Autentificación de usuarios con Devise • Resolución del ejercicio propuesto
  • 3. Repaso a generadores y aclaraciones sobre Scaffolding
  • 4. Para tener un CRUD de un modelo necesitamos: • Modelo • Controlador • Vistas • Tabla en la base de datos (migración) • Rutas configuradas (routes.rb)
  • 5. Para tener un CRUD de un modelo necesitamos: • Modelo Todo esto nos lo ofrece • Controlador el scaffold • Vistas • Tabla en la base de datos (migración) • Rutas configuradas (routes.rb)
  • 6. El Scaffold además... rails g scaffold Task invoke active_record create db/migrate/20120224135839_create_tasks.rb name:string create app/models/task.rb description:text invoke test_unit priority:integer create test/unit/task_test.rb create test/fixtures/tasks.yml due_to:date route resources :tasks done:boolean invoke scaffold_controller create app/controllers/tasks_controller.rb category:references invoke erb create app/views/tasks create app/views/tasks/index.html.erb create app/views/tasks/edit.html.erb create app/views/tasks/show.html.erb create app/views/tasks/new.html.erb create app/views/tasks/_form.html.erb invoke test_unit create test/functional/tasks_controller_test.rb invoke helper create app/helpers/tasks_helper.rb invoke test_unit create test/unit/helpers/tasks_helper_test.rb invoke assets invoke coffee create app/assets/javascripts/tasks.js.coffee invoke scss create app/assets/stylesheets/tasks.css.scss invoke scss create app/assets/stylesheets/scaffolds.css.scss
  • 7. El Scaffold además... rails g scaffold Task invoke active_record create db/migrate/20120224135839_create_tasks.rb name:string create app/models/task.rb description:text invoke test_unit priority:integer create test/unit/task_test.rb create test/fixtures/tasks.yml due_to:date route resources :tasks done:boolean invoke scaffold_controller create app/controllers/tasks_controller.rb category:references invoke erb create app/views/tasks create app/views/tasks/index.html.erb Genera create create create app/views/tasks/edit.html.erb app/views/tasks/show.html.erb app/views/tasks/new.html.erb CSS (SCSS), create invoke create app/views/tasks/_form.html.erb test_unit test/functional/tasks_controller_test.rb Javascript invoke create invoke helper app/helpers/tasks_helper.rb test_unit (Coffee), create invoke invoke assets test/unit/helpers/tasks_helper_test.rb coffee Helpers, y create invoke create app/assets/javascripts/tasks.js.coffee scss app/assets/stylesheets/tasks.css.scss Tests invoke create scss app/assets/stylesheets/scaffolds.css.scss
  • 8. El Scaffold NO hace... • No incluye selects para relacionar modelos en los formularios que crea. • Si hiciste scaffold, y posteriormente incluyes un campo nuevo a la tabla de tu modelo, las vistas no se actualizan solas: tendrás que actualizarlas tú. • Si añades nuevas acciones a tu controlador, tendrás que incluirlas en el routes.rb. El scaffold solo define rutas para el CRUD.
  • 9. Montando un CRUD SIN Scaffold • Modelo y Tabla (migración) rails g model User name:string rake db:migrate • Modelo sin Tabla (migración) rails g model User name:string --migrations false • Controlador rails g controller User tip: rails g controller --help • Tendremos que añadir las acciones CRUD (index, show, edit, create, update, destroy) al controlador a mano • Las vistas las creamos a mano desde nuestro editor • Tendremos que editar el routes.rb y añadir rutas CRUD (resources :users) o rutas propias
  • 11. Algunas notas sobre Rails y Javascript • Rails es Javascript framework agnostic, es decir, que puede integrarse tanto con jQuery como con Prototype, etc. • Para integrar Rails con cada framework se usan “adaptadores”. • Por defecto Rails añade al Gemfile el adaptador jquery-rails. Es decir: sin hacer nada, podemos empezar a usar jQuery.
  • 12. Generar petición AJAX con Rails <%= link_to 'Destroy', task, confirm: 'Are you sure?', method: :delete, :remote => true %> <%= form_for(@task, :remote => true) do |f| %>
  • 13. Generar petición AJAX con Rails <%= link_to 'Destroy', task, confirm: 'Are you sure?', method: :delete, :remote => true %> <%= form_for(@task, :remote => true) do |f| %> Por defecto estas peticiones esperan recibir código Javascript
  • 14. ¿Qué debe devolver la petición AJAX? • Una petición AJAX puede devolver diferentes tipos de datos: • Código Javascript • JSON • JSONP (llamada a función JS + datos JSON) • Texto • HTML
  • 15. ¿Qué debe devolver la petición AJAX? • Una petición AJAX puede devolver diferentes tipos de datos: • Código Javascript Normalmente usaremos • JSON estos dos • JSONP (llamada a función JS + datos JSON) • Texto • HTML
  • 17. Javascript VS JSON • Devolver Javascript
  • 18. Javascript VS JSON • Devolver Javascript • A cada petición AJAXbloque de contestamos con un código Javascript, resultante de interpretar un archivo .js.erb
  • 19. Javascript VS JSON • Devolver Javascript • A cada petición AJAXbloque de contestamos con un código Javascript, resultante de interpretar un archivo .js.erb • Los archivos .js.erb mezclan JS y Ruby.
  • 20. Javascript VS JSON • Devolver Javascript • A cada petición AJAXbloque de contestamos con un código Javascript, resultante de interpretar un archivo .js.erb • Los archivos .js.erb mezclan JS y Ruby. • Se almacenan en la carpeta app/views
  • 21. Javascript VS JSON • Devolver Javascript • A cada petición AJAXbloque de contestamos con un código Javascript, resultante de interpretar un archivo .js.erb • Los archivos .js.erb mezclan JS y Ruby. • Se almacenan en la carpeta app/views • Insertandorenderizar vistas, podemos: código ERB: usar helpers, iterar con Ruby, etc.
  • 22. Javascript VS JSON • Devolver Javascript • A cada petición AJAXbloque de contestamos con un código Javascript, resultante de interpretar un archivo .js.erb • Los archivos .js.erb mezclan JS y Ruby. • Se almacenan en la carpeta app/views • Insertandorenderizar vistas, podemos: código ERB: usar helpers, iterar con Ruby, etc. • Tardan un poco más en ser ejecutados por el navegador.
  • 23. Javascript VS JSON • Devolver Javascript • Devolver JSON • A cada petición AJAXbloque de contestamos con un código Javascript, resultante de interpretar un archivo .js.erb • Los archivos .js.erb mezclan JS y Ruby. • Se almacenan en la carpeta app/views • Insertandorenderizar vistas, podemos: código ERB: usar helpers, iterar con Ruby, etc. • Tardan un poco más en ser ejecutados por el navegador.
  • 24. Javascript VS JSON • Devolver Javascript • Devolver JSON • A cada petición AJAXbloque de contestamos con un • En un archivo .js normal, con jQuery escucharemos los código Javascript, resultante de eventos Ajax (success, error, interpretar un archivo .js.erb etc). • Los archivos .js.erb mezclan JS y Ruby. • Se almacenan en la carpeta app/views • Insertandorenderizar vistas, podemos: código ERB: usar helpers, iterar con Ruby, etc. • Tardan un poco más en ser ejecutados por el navegador.
  • 25. Javascript VS JSON • Devolver Javascript • Devolver JSON • A cada petición AJAXbloque de contestamos con un • En un archivo .js normal, con jQuery escucharemos los código Javascript, resultante de eventos Ajax (success, error, interpretar un archivo .js.erb etc). • Los archivos .js.erb mezclan JS y Ruby. • El controlador Rails codificará los datos en • Se almacenan en la carpeta app/views JSON render json: @task • Insertandorenderizar vistas, podemos: código ERB: usar helpers, iterar con Ruby, etc. • Tardan un poco más en ser ejecutados por el navegador.
  • 26. Javascript VS JSON • Devolver Javascript • Devolver JSON • A cada petición AJAXbloque de contestamos con un • En un archivo .js normal, con jQuery escucharemos los código Javascript, resultante de eventos Ajax (success, error, interpretar un archivo .js.erb etc). • Los archivos .js.erb mezclan JS y Ruby. • El controlador Rails codificará los datos en • Se almacenan en la carpeta app/views JSON render json: @task • Insertandorenderizar vistas, podemos: código ERB: • La función de archivo .js callback definida en el usar helpers, iterar con Ruby, normal recibirá los datos etc. JSON y hará algo con ellos. • Tardan un poco más en ser ejecutados por el navegador.
  • 27. Devolviendo Javascript con Rails En nuestro controlador: def create @task = Task.new(params[:task]) respond_to do |format| if @task.save format.html { redirect_to @task, notice: 'Task was successfully created.' } format.js # Por defecto buscará create.js.erb else format.html { render action: "new" } format.js # Por defecto buscará create.js.erb end end end Vista $('ul[data-category_id='+<%= @task.category_id %>+']').append('<li><%= escape_javascript render("header_task", :task => @task) %></li>');
  • 28. Autentificación de Usuarios con Devise https://github.com/plataformatec/devise
  • 30. Eso es todo :) Gracias!

Notas del editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n