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 Ingenierio de Software @ michelada.io Consultant @ Gimme Radio

    Promotor @ FLOSS Doom Metal Lover Anfitrión @ Traguitos de michelada meetup
  2. #WWCODEGDL MODELO • Mantiene la relación entre los objetos y

    la base de datos y maneja las validaciones, asociaciones y transacciones
  3. #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. #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. #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. #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. #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. #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. #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. #WWCODEGDL ACTION CONTROLLER class BlogsController < ApplicationController def show @blog

    = Blog.find(params[:id]) end end app/controllers/blogs_controller.rb
  11. #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. #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. #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. #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. #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. #WWCODEGDL AUTORIZACIÓN class ApplicationPolicy attr_reader :user, :record def initialize(user, record)

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

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

    end … app/policies/application_policy.rb
  19. #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
  20. #WWCODEGDL AUTORIZACIÓN … def index? user && user.email == ‘[email protected]'

    end def show? index? end … app/policies/application_policy.rb
  21. #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