Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Recetas de Rails

Recetas de Rails

Muchos principiantes comienzan a adentrarse en el mundo de Ruby on Rails debido a que facilita la velocidad de desarrollo, proporcionándonos soluciones robustas y confiables a problemas ya conocidos, pero, ¿cómo empezar? En esta charla veremos algunas gemas que podemos integrar en nuestras aplicaciones, y cómo podemos usarlas para obtener las ventajas del desarrollo rápido, solucionando de manera sencilla problemas recurrentes en las aplicaciones web.

Fernando Perales

April 03, 2019
Tweet

More Decks by Fernando Perales

Other Decks in Programming

Transcript

  1. #WWCODEGDL
    RECETAS DE RAILS
    FERNANDO PERALES

    View Slide

  2. #WWCODEGDL

    View Slide

  3. #WWCODEGDL
    Ingenierio de Software @ michelada.io
    Consultant @ Gimme Radio
    Promotor @ FLOSS
    Doom Metal Lover
    Anfitrión @ Traguitos de michelada meetup

    View Slide

  4. #WWCODEGDL

    View Slide

  5. #WWCODEGDL
    HTTP

    View Slide

  6. #WWCODEGDL
    https://medium.freecodecamp.org/understanding-the-basics-of-ruby-on-rails-http-mvc-and-routes-359b8d809c7a

    View Slide

  7. #WWCODEGDL
    ARQUITECTURA MVC

    View Slide

  8. #WWCODEGDL
    MODELO
    VISTA
    CONTROLADOR

    View Slide

  9. #WWCODEGDL
    https://www.sitepoint.com/model-view-controller-mvc-architecture-rails/

    View Slide

  10. #WWCODEGDL
    MODELO
    • Mantiene la relación entre los objetos y la base de
    datos y maneja las validaciones, asociaciones y
    transacciones

    View Slide

  11. #WWCODEGDL
    VISTA
    • La representación de datos en un formato
    específico, desencadenado por la decisión de un
    controlador de presentar la información

    View Slide

  12. #WWCODEGDL
    CONTROLADOR
    • La parte de la aplicación que dirige el tráfico. Por
    una parte, obtiene la información necesaria
    mediante los modelos a información específica y
    por otra parte, organiza la información de manera
    que satisfaga las necesidades de una vista

    View Slide

  13. #WWCODEGDL
    ARQUITECTURA DE RAILS

    View Slide

  14. #WWCODEGDL
    https://medium.freecodecamp.org/understanding-the-basics-of-ruby-on-rails-http-mvc-and-routes-359b8d809c7a

    View Slide

  15. #WWCODEGDL
    https://burycollege.ac.uk/about-us/events/events/2018/march/chef-club-march-beginner/

    View Slide

  16. #WWCODEGDL
    ENTRADAS

    View Slide

  17. #WWCODEGDL
    NUEVA APP

    View Slide

  18. #WWCODEGDL
    rails new recetas-de-rails

    View Slide

  19. #WWCODEGDL
    SCAFFOLD

    View Slide

  20. #WWCODEGDL
    rails g scaffold Blog \
    name:string \
    link:string \
    permalink:string

    View Slide

  21. #WWCODEGDL
    rails db:migrate

    View Slide

  22. #WWCODEGDL
    ACTIVE RECORD

    View Slide

  23. #WWCODEGDL
    ACTIVE RECORD
    (MODELO)

    View Slide

  24. #WWCODEGDL
    ACTIVE RECORD
    • Establecer la conexión con la base de datos
    • Obtener información de las tablas
    • Almacenar nueva información en las tablas
    • Manejar la evolución de nuestra base de datos

    View Slide

  25. #WWCODEGDL
    ACTIVE RECORD
    https://www.sitepoint.com/model-view-controller-mvc-architecture-rails/

    View Slide

  26. #WWCODEGDL
    ACTIVE RECORD
    class Blog < ApplicationRecord
    end
    app/models/blog.rb

    View Slide

  27. #WWCODEGDL
    ACTIVE RECORD
    class ApplicationRecord < ActiveRecord::Base
    self.abstract_class = true
    end
    app/models/application_record.rb

    View Slide

  28. #WWCODEGDL
    ACTIVE RECORD
    rails console

    View Slide

  29. #WWCODEGDL
    ACTIVE RECORD
    rails console
    > Blog.count
    (0.6ms) SELECT COUNT(*) FROM “blogs”
    => 2

    View Slide

  30. #WWCODEGDL
    ACTIVE RECORD
    rails console
    > blog = Blog.find(2)
    => #“https://pooocs.net", permalink: “my-shiny-weblog”

    View Slide

  31. #WWCODEGDL
    rails console
    > blog = Blog.find(2)

    User Load (0.2ms) SELECT "blogs".* FROM “blogs"
    WHERE “blogs"."id" = ? LIMIT ? [["id", 1],
    ["LIMIT", 1]]
    => #“https://pooocs.net", permalink: “my-shiny-weblog”
    > blog.name
    => “My shiny weblog”
    > blog.permalink
    => “my-shiny-weblog”
    ACTIVE RECORD

    View Slide

  32. #WWCODEGDL
    > blog.destroy
    (0.1ms) begin transaction
    User Destroy (3.6ms) DELETE FROM "blogs" WHERE
    "users"."id" = ? [["id", 2]]
    (1.1ms) commit transaction
    => #“https://pooocs.net", permalink: “my-shiny-weblog”
    > blog = Blog.find(2)
    ActiveRecord::RecordNotFound: Couldn't find Blog
    with ‘id'=2
    >
    ACTIVE RECORD

    View Slide

  33. #WWCODEGDL
    ACTION CONTROLLER

    View Slide

  34. #WWCODEGDL
    ACTION CONTROLLER
    (CONTROLADOR)

    View Slide

  35. #WWCODEGDL
    ACTION CONTROLLER
    • Decidir cómo manejar una petición en particular
    • Obtener datos desde el modelo para ser pasados
    a las vistas
    • Recolectar la información de una petición y usarla
    para crear o actualizar información en los modelos

    View Slide

  36. #WWCODEGDL
    ACTION CONTROLLER
    class BlogsController < ApplicationController
    end
    app/controllers/blogs_controller.rb

    View Slide

  37. #WWCODEGDL
    ACTION CONTROLLER
    class ApplicationController < ActionController::Base
    end
    app/controllers/application_controller.rb

    View Slide

  38. #WWCODEGDL
    ACTION CONTROLLER

    View Slide

  39. #WWCODEGDL
    ACTION CONTROLLER
    http://localhost:3000/blogs/1

    View Slide

  40. #WWCODEGDL
    ACTION CONTROLLER
    class BlogsController < ApplicationController
    def show
    @blog = Blog.find(params[:id])
    end
    end
    app/controllers/blogs_controller.rb

    View Slide

  41. #WWCODEGDL
    ACTION VIEW

    View Slide

  42. #WWCODEGDL
    ACTION VIEW
    (VISTA)

    View Slide

  43. #WWCODEGDL
    ACTION VIEW
    • Presentar la información al cliente que la solicita
    en el formato indicado

    View Slide

  44. #WWCODEGDL
    ACTION CONTROLLER
    Blog name:
    app/views/blogs/show.html.erb

    View Slide

  45. #WWCODEGDL
    ACTION CONTROLLER
    localhost:3000/blogs/1

    View Slide

  46. #WWCODEGDL
    PLATOS FUERTES

    View Slide

  47. #WWCODEGDL
    AUTENTICACIÓN

    View Slide

  48. #WWCODEGDL
    AUTENTICACIÓN
    • Confirmar que un usuario es quien dice ser

    View Slide

  49. #WWCODEGDL
    AUTENTICACIÓN
    Devise
    plataformatec/devise

    View Slide

  50. #WWCODEGDL
    AUTENTICACIÓN
    gem ‘devise’
    Gemfile

    View Slide

  51. #WWCODEGDL
    AUTENTICACIÓN
    bundle install

    View Slide

  52. #WWCODEGDL
    AUTENTICACIÓN
    rails generate devise:install

    View Slide

  53. #WWCODEGDL
    AUTENTICACIÓN
    rails generate devise MODEL

    View Slide

  54. #WWCODEGDL
    AUTENTICACIÓN
    rails generate devise User

    View Slide

  55. #WWCODEGDL
    AUTENTICACIÓN
    rails generate devise User \
    name:string

    View Slide

  56. #WWCODEGDL
    AUTENTICACIÓN
    class DeviseCreateUsers < ActiveRecord::Migration[6.0]
    def change
    create_table :users do |t|
    ## Database authenticatable
    t.string :email, null: false, default: ""
    t.string :encrypted_password, null: false, default: ""
    db/migrate/XXXXXXXXXXXXXX_devise_create_users.rb

    View Slide

  57. #WWCODEGDL
    AUTENTICACIÓN
    ## Recoverable
    t.string :reset_password_token
    t.datetime :reset_password_sent_at
    ## Rememberable
    t.datetime :remember_created_at
    db/migrate/XXXXXXXXXXXXXX_devise_create_users.rb

    View Slide

  58. #WWCODEGDL
    AUTENTICACIÓN
    t.string :name
    t.timestamps null: false
    end
    db/migrate/XXXXXXXXXXXXXX_devise_create_users.rb

    View Slide

  59. #WWCODEGDL
    AUTENTICACIÓN
    class User < ApplicationRecord
    # Include default devise modules. Others available are:
    # :confirmable, :lockable, :timeoutable, :trackable
    and :omniauthable
    devise :database_authenticatable, :registerable,
    :recoverable, :rememberable, :validatable
    end
    app/models/user.rb

    View Slide

  60. #WWCODEGDL
    AUTENTICACIÓN
    Rails.application.routes.draw do
    devise_for :users
    end
    config/routes.rb

    View Slide

  61. #WWCODEGDL
    AUTENTICACIÓN
    rails db:migrate

    View Slide

  62. #WWCODEGDL
    AUTENTICACIÓN
    rails server

    View Slide

  63. #WWCODEGDL
    AUTENTICACIÓN
    => Booting Puma
    => Rails 5.2.3 application starting in development
    => Run `rails server -h` for more startup options
    Puma starting in single mode...
    * Version 3.12.1 (ruby 2.4.5-p335), codename:
    Llamas in Pajamas
    * Min threads: 5, max threads: 5
    * Environment: development
    * Listening on tcp://localhost:3000
    Use Ctrl-C to stop

    View Slide

  64. #WWCODEGDL
    AUTENTICACIÓN
    http://localhost:3000

    View Slide

  65. #WWCODEGDL
    AUTENTICACIÓN
    http://localhost:3000/users/sign_in

    View Slide

  66. #WWCODEGDL
    AUTENTICACIÓN
    http://localhost:3000/users/sign_up

    View Slide

  67. #WWCODEGDL
    PANEL DE ADMINISTRACIÓN

    View Slide

  68. #WWCODEGDL
    PANEL DE ADMINISTRACIÓN
    • Tener una interfaz para manejar los datos del
    sistema

    View Slide

  69. #WWCODEGDL
    PANEL DE ADMINISTRACIÓN
    RailsAdmin
    sferik/rails_admin

    View Slide

  70. #WWCODEGDL
    AUTENTICACIÓN
    gem ‘rails_admin’, ‘~> 1.3’
    Gemfile

    View Slide

  71. #WWCODEGDL
    AUTENTICACIÓN
    bundle install

    View Slide

  72. #WWCODEGDL
    AUTENTICACIÓN
    rails g rails_admin:install

    View Slide

  73. #WWCODEGDL
    AUTENTICACIÓN
    ? Where do you want to mount rails_admin? Press
    for [admin] > admin
    route mount RailsAdmin::Engine => '/admin', as:
    'rails_admin'
    create config/initializers/rails_admin.rb

    View Slide

  74. #WWCODEGDL
    AUTENTICACIÓN
    http://localhost:3000/admin

    View Slide

  75. #WWCODEGDL
    AUTENTICACIÓN
    http://localhost:3000/admin

    View Slide

  76. #WWCODEGDL
    AUTENTICACIÓN
    http://localhost:3000/admin/user

    View Slide

  77. #WWCODEGDL
    AUTENTICACIÓN
    http://localhost:3000/admin/user/1/edit

    View Slide

  78. #WWCODEGDL
    AUTORIZACIÓN

    View Slide

  79. #WWCODEGDL
    AUTORIZACIÓN
    • Confirmar que un usuario tiene permisos para
    acceder a los recursos del sistema

    View Slide

  80. #WWCODEGDL
    AUTORIZACIÓN
    Pundit
    varvet/pundit

    View Slide

  81. #WWCODEGDL
    AUTORIZACIÓN
    gem ‘pundit’
    Gemfile

    View Slide

  82. #WWCODEGDL
    AUTORIZACIÓN
    bundle install

    View Slide

  83. #WWCODEGDL
    AUTORIZACIÓN
    rails g pundit:install

    View Slide

  84. #WWCODEGDL
    AUTORIZACIÓN
    class ApplicationController < ActionController::Base
    include Pundit
    end
    app/controllers/application_controller.rb

    View Slide

  85. #WWCODEGDL
    AUTORIZACIÓN
    class ApplicationPolicy
    attr_reader :user, :record
    def initialize(user, record)
    @user = user
    @record = record
    end

    app/policies/application_policy.rb

    View Slide

  86. #WWCODEGDL
    AUTORIZACIÓN

    def index?
    false
    end
    def show?
    false
    end

    app/policies/application_policy.rb

    View Slide

  87. #WWCODEGDL
    AUTORIZACIÓN

    def create?
    false
    end
    def new?
    create?
    end

    app/policies/application_policy.rb

    View Slide

  88. #WWCODEGDL
    AUTORIZACIÓN

    def update?
    false
    end
    def edit?
    update?
    end

    app/policies/application_policy.rb

    View Slide

  89. #WWCODEGDL
    AUTORIZACIÓN

    def destroy?
    false
    end

    end
    app/policies/application_policy.rb

    View Slide

  90. #WWCODEGDL
    AUTORIZACIÓN
    RailsAdmin.config do |config|

    config.authorize_with :pundit

    end
    config/initializers/rails_admin.rb

    View Slide

  91. #WWCODEGDL
    AUTORIZACIÓN

    def history?; end
    def show_in_app?; end
    def dashboard?; end
    def export?; end
    def rails_admin_index?; end

    end
    app/policies/application_policy.rb

    View Slide

  92. #WWCODEGDL
    AUTORIZACIÓN

    def index?
    user && user.email == ‘[email protected]'
    end
    def show?
    index?
    end

    app/policies/application_policy.rb

    View Slide

  93. #WWCODEGDL
    AUTORIZACIÓN
    http://localhost:3000/admin

    View Slide

  94. #WWCODEGDL
    AUTORIZACIÓN
    http://localhost:3000/admin

    View Slide

  95. #WWCODEGDL
    AUTORIZACIÓN
    class ApplicationController < ActionController::Base
    include Pundit
    rescue_from Pundit::NotAuthorizedError do |exception|
    redirect_to main_app.new_user_session_path
    end
    end
    app/controllers/application_controller.rb

    View Slide

  96. #WWCODEGDL
    AUTORIZACIÓN
    RailsAdmin.config do |config|

    config.parent_controller = 'ApplicationController'

    end
    config/initializers/rails_admin.rb

    View Slide

  97. #WWCODEGDL
    POSTRES

    View Slide

  98. #WWCODEGDL

    View Slide

  99. #WWCODEGDL

    View Slide

  100. #WWCODEGDL

    View Slide

  101. #WWCODEGDL

    View Slide

  102. #WWCODEGDL
    RUBY-TOOLBOX.COM

    View Slide

  103. #WWCODEGDL
    ¿PREGUNTAS?

    View Slide

  104. #WWCODEGDL
    SPEAKERDECK.COM/FERPERALES/
    RECETAS-DE-RAILS

    View Slide

  105. #WWCODEGDL
    ¡GRACIAS!
    [email protected]

    View Slide