SlideShare une entreprise Scribd logo
1  sur  30
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!

Contenu connexe

Tendances

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 diaFrancisco Aranda
 
Workshop 7: Single Page Applications
Workshop 7: Single Page ApplicationsWorkshop 7: Single Page Applications
Workshop 7: Single Page ApplicationsVisual Engineering
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on railspelusa
 
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ápidoCarlos Granados
 
Ruby on Rails - ETyC 2011
Ruby on Rails - ETyC 2011Ruby on Rails - ETyC 2011
Ruby on Rails - ETyC 2011Rafael 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 DevelopmentAlberto 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
 
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 GroovyJose 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 javaEudris Cabrera
 

Tendances (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
 

Similaire à 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 RailsFreelancer
 
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 Ramirezjavier ramirez
 
Javier Ramirez Rails Plugins Pdf
Javier Ramirez Rails Plugins PdfJavier Ramirez Rails Plugins Pdf
Javier Ramirez Rails Plugins Pdfjavier ramirez
 
Rails Plugins. Javier Ramirez
Rails Plugins. Javier RamirezRails Plugins. Javier Ramirez
Rails Plugins. Javier Ramirezjavier ramirez
 
Ruby On Rails Intro
Ruby On Rails IntroRuby On Rails Intro
Ruby On Rails IntroThirdWay
 
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 DynamoDBAbimael 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 2009Nelson Rojas Núñez
 
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.pptBYRONMIGUELSUBUYUCPA
 
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 MVCParadigma Digital
 
Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJSBEEVA_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/2012Damian Serrano Thode
 

Similaire à 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
 

Plus 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 DevsDiacode
 
Introduction to Elixir
Introduction to ElixirIntroduction to Elixir
Introduction to ElixirDiacode
 
Startup nomads
Startup nomadsStartup nomads
Startup nomadsDiacode
 
Ruby on Rails & TDD con RSpec
Ruby on Rails & TDD con RSpecRuby on Rails & TDD con RSpec
Ruby on Rails & TDD con RSpecDiacode
 
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 MadridDiacode
 
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 proyectoDiacode
 
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 proyectoDiacode
 
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 ThingDiacode
 
Front-End Frameworks: a quick overview
Front-End Frameworks: a quick overviewFront-End Frameworks: a quick overview
Front-End Frameworks: a quick overviewDiacode
 

Plus 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
 

Dernier

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 

Dernier (10)

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 

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!

Notes de l'éditeur

  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