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. 3.

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

    Promotor @ FLOSS Doom Metal Lover Anfitrión @ Traguitos de michelada meetup
  2. 10.

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

    la base de datos y maneja las validaciones, asociaciones y transacciones
  3. 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
  4. 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
  5. 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
  6. 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”
  7. 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
  8. 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
  9. 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
  10. 40.

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

    = Blog.find(params[:id]) end end app/controllers/blogs_controller.rb
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. 85.

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

    @user = user @record = record end … app/policies/application_policy.rb
  17. 86.

    #WWCODEGDL AUTORIZACIÓN … def index? false end def show? false

    end … app/policies/application_policy.rb
  18. 87.

    #WWCODEGDL AUTORIZACIÓN … def create? false end def new? create?

    end … app/policies/application_policy.rb
  19. 88.
  20. 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
  21. 92.

    #WWCODEGDL AUTORIZACIÓN … def index? user && user.email == ‘me@ferperales.net'

    end def show? index? end … app/policies/application_policy.rb
  22. 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
  23. 100.
  24. 101.