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.

6c137ee3013821b517c4b9beed0145df?s=128

Fernando Perales

April 03, 2019
Tweet

Transcript

  1. #WWCODEGDL RECETAS DE RAILS FERNANDO PERALES

  2. #WWCODEGDL <ME>

  3. #WWCODEGDL Ingenierio de Software @ michelada.io Consultant @ Gimme Radio

    Promotor @ FLOSS Doom Metal Lover Anfitrión @ Traguitos de michelada meetup
  4. #WWCODEGDL </ME>

  5. #WWCODEGDL HTTP

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

  7. #WWCODEGDL ARQUITECTURA MVC

  8. #WWCODEGDL MODELO VISTA CONTROLADOR

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

  10. #WWCODEGDL MODELO • Mantiene la relación entre los objetos y

    la base de datos y maneja las validaciones, asociaciones y transacciones
  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
  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
  13. #WWCODEGDL ARQUITECTURA DE RAILS

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

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

  16. #WWCODEGDL ENTRADAS

  17. #WWCODEGDL NUEVA APP

  18. #WWCODEGDL rails new recetas-de-rails

  19. #WWCODEGDL SCAFFOLD

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

    permalink:string
  21. #WWCODEGDL rails db:migrate

  22. #WWCODEGDL ACTIVE RECORD

  23. #WWCODEGDL ACTIVE RECORD (MODELO)

  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
  25. #WWCODEGDL ACTIVE RECORD https://www.sitepoint.com/model-view-controller-mvc-architecture-rails/

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

  27. #WWCODEGDL ACTIVE RECORD class ApplicationRecord < ActiveRecord::Base self.abstract_class = true

    end app/models/application_record.rb
  28. #WWCODEGDL ACTIVE RECORD rails console

  29. #WWCODEGDL ACTIVE RECORD rails console > Blog.count (0.6ms) SELECT COUNT(*)

    FROM “blogs” => 2
  30. #WWCODEGDL ACTIVE RECORD rails console > blog = Blog.find(2) =>

    #<Blog id:2, name: “My shiny weblog”, link: “https://pooocs.net", permalink: “my-shiny-weblog”
  31. #WWCODEGDL rails console > blog = Blog.find(2)
 User Load (0.2ms)

    SELECT "blogs".* FROM “blogs" WHERE “blogs"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] => #<Blog id:2, name: “My shiny weblog”, link: “https://pooocs.net", permalink: “my-shiny-weblog” > blog.name => “My shiny weblog” > blog.permalink => “my-shiny-weblog” ACTIVE RECORD
  32. #WWCODEGDL > blog.destroy (0.1ms) begin transaction User Destroy (3.6ms) DELETE

    FROM "blogs" WHERE "users"."id" = ? [["id", 2]] (1.1ms) commit transaction => #<Blog id:2, name: “My shiny weblog”, link: “https://pooocs.net", permalink: “my-shiny-weblog” > blog = Blog.find(2) ActiveRecord::RecordNotFound: Couldn't find Blog with ‘id'=2 > ACTIVE RECORD
  33. #WWCODEGDL ACTION CONTROLLER

  34. #WWCODEGDL ACTION CONTROLLER (CONTROLADOR)

  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
  36. #WWCODEGDL ACTION CONTROLLER class BlogsController < ApplicationController end app/controllers/blogs_controller.rb

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

  38. #WWCODEGDL ACTION CONTROLLER

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

  40. #WWCODEGDL ACTION CONTROLLER class BlogsController < ApplicationController def show @blog

    = Blog.find(params[:id]) end end app/controllers/blogs_controller.rb
  41. #WWCODEGDL ACTION VIEW

  42. #WWCODEGDL ACTION VIEW (VISTA)

  43. #WWCODEGDL ACTION VIEW • Presentar la información al cliente que

    la solicita en el formato indicado
  44. #WWCODEGDL ACTION CONTROLLER <strong>Blog name: <%= @blog.name %></strong> app/views/blogs/show.html.erb

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

  46. #WWCODEGDL PLATOS FUERTES

  47. #WWCODEGDL AUTENTICACIÓN

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

    ser
  49. #WWCODEGDL AUTENTICACIÓN Devise plataformatec/devise

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

  51. #WWCODEGDL AUTENTICACIÓN bundle install

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

  53. #WWCODEGDL AUTENTICACIÓN rails generate devise MODEL

  54. #WWCODEGDL AUTENTICACIÓN rails generate devise User

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

  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
  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
  58. #WWCODEGDL AUTENTICACIÓN t.string :name t.timestamps null: false end db/migrate/XXXXXXXXXXXXXX_devise_create_users.rb

  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
  60. #WWCODEGDL AUTENTICACIÓN Rails.application.routes.draw do devise_for :users end config/routes.rb

  61. #WWCODEGDL AUTENTICACIÓN rails db:migrate

  62. #WWCODEGDL AUTENTICACIÓN rails server

  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
  64. #WWCODEGDL AUTENTICACIÓN http://localhost:3000

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

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

  67. #WWCODEGDL PANEL DE ADMINISTRACIÓN

  68. #WWCODEGDL PANEL DE ADMINISTRACIÓN • Tener una interfaz para manejar

    los datos del sistema
  69. #WWCODEGDL PANEL DE ADMINISTRACIÓN RailsAdmin sferik/rails_admin

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

  71. #WWCODEGDL AUTENTICACIÓN bundle install

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

  73. #WWCODEGDL AUTENTICACIÓN ? Where do you want to mount rails_admin?

    Press <enter> for [admin] > admin route mount RailsAdmin::Engine => '/admin', as: 'rails_admin' create config/initializers/rails_admin.rb
  74. #WWCODEGDL AUTENTICACIÓN http://localhost:3000/admin

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

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

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

  78. #WWCODEGDL AUTORIZACIÓN

  79. #WWCODEGDL AUTORIZACIÓN • Confirmar que un usuario tiene permisos para

    acceder a los recursos del sistema
  80. #WWCODEGDL AUTORIZACIÓN Pundit varvet/pundit

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

  82. #WWCODEGDL AUTORIZACIÓN bundle install

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

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

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

    @user = user @record = record end … app/policies/application_policy.rb
  86. #WWCODEGDL AUTORIZACIÓN … def index? false end def show? false

    end … app/policies/application_policy.rb
  87. #WWCODEGDL AUTORIZACIÓN … def create? false end def new? create?

    end … app/policies/application_policy.rb
  88. #WWCODEGDL AUTORIZACIÓN … def update? false end def edit? update?

    end … app/policies/application_policy.rb
  89. #WWCODEGDL AUTORIZACIÓN … def destroy? false end … end app/policies/application_policy.rb

  90. #WWCODEGDL AUTORIZACIÓN RailsAdmin.config do |config| … config.authorize_with :pundit … end

    config/initializers/rails_admin.rb
  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
  92. #WWCODEGDL AUTORIZACIÓN … def index? user && user.email == ‘me@ferperales.net'

    end def show? index? end … app/policies/application_policy.rb
  93. #WWCODEGDL AUTORIZACIÓN http://localhost:3000/admin

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

  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
  96. #WWCODEGDL AUTORIZACIÓN RailsAdmin.config do |config| … config.parent_controller = 'ApplicationController' …

    end config/initializers/rails_admin.rb
  97. #WWCODEGDL POSTRES

  98. #WWCODEGDL

  99. #WWCODEGDL

  100. #WWCODEGDL

  101. #WWCODEGDL

  102. #WWCODEGDL RUBY-TOOLBOX.COM

  103. #WWCODEGDL ¿PREGUNTAS?

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

  105. #WWCODEGDL ¡GRACIAS! ME@FERPERALES.NET