Formação Ruby & Redu :: Ruby on Rails

Embed Size (px)

DESCRIPTION

Introdução ao Rails, componentes, instalação, Referências e etc.

Citation preview

  • Ruby on Rails I

    Tiago Lima Scio e Lder tcnico, Redu

    !14 de Maro de 2014

  • Roteiro

    Comeando com Rails

    Bundler

    ActiveRecord

    Migraes

    Validaes

    Associaes

    Mos obra

    !

  • Quem usa?

  • Comeando com Rails

  • Framework para desenvolvimento de aplicaes Web

    Filosofia Rails

    DRY - Dont Repeat Yourself

    Conveno sobre configurao

    REST

    O que Ruby on Rails?

  • Arquitetura de software baseada em Modelos, Views e Controladores

    Benefcios

    Isolamento da lgica de negcios

    Clara separao de responsabilidades, facilitando a manuteno

    MVC

  • Os componentes do Rails

    Action Pack

    Action Controller

    Action Dispatch

    Action View

    Active Model

    Active Record

  • Instalando Rails

    !

    Linux e Mac (se j houver o rubygems)

    !

    !

    Windows

    Rails Installer FTW! http://railsinstaller.org/

    $ gem install rails $ rails --version

  • Criando uma aplicao Rails

    !

    !

    Um nico comando

    $ rails new nome_do_app

  • Estrutura de uma aplicao Rails

  • Bundler

  • Gerenciamento de dependncias

    http://gembundler.com/

  • Gerenciamento de dependncias

    Gemfile

    source 'https://rubygems.org' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '4.0.0' # Use sqlite3 as the database for Active Record gem 'sqlite3' # Use SCSS for stylesheets gem 'sass-rails', '~> 4.0.0'

  • Adio de um gem

    koala

    !

    !

    Instalao

    !gem "mysql2"

    !$> bundle install

  • Adio de um gem

    Resultado

    !Using json (1.8.0) Installing mysql2 (0.3.11) Using tilt (1.4.1) Using sprockets (2.10.0)

    !

  • ActiveRecord

  • ActiveRecord

    a implementao de um padro de mapeamento objeto-relacional (ORM)

    Conecta classes e atributos a tabelas e colunas

  • ActiveRecord

    Permite:

    Migraes

    Validaes

    Associaes

    Transaes

    Entre outras coisas...

  • Migraes

  • Migraes

    Um jeito bonito e organizado de alterar o banco de dados

    Vantagens

    No h necessidade de comunicar outros desenvolvedores que houve mudana no BD

    No h necessidade de conhecer a linguagem especfica do SQL

    independente de banco de dados, suporte a diversos SGBDs

  • Migraes

    Estrutura das migraes:

    class CreateProducts < ActiveRecord::Migration

    def up create_table :products do |t| t.string :name t.text :description t.timestamps end end def down drop_table :products end end

  • Migraes

    Ou: class CreateProducts < ActiveRecord::Migration def change create_table :products do |t| t.string :name t.text :description t.timestamps end end end

  • Migraes

    Olhando mais de perto as migraes

    class CreateProducts < ActiveRecord::Migration

    def up create_table :products do |t| t.string :name t.text :description t.timestamps end end def down drop_table :products end end

  • Migraes

    Mtodos:add_column!add_index!add_reference!add_timestamps!create_table!create_join_table!drop_table (must supply a block)!drop_join_table (must supply a block)!remove_timestamps!rename_column!rename_index!remove_reference!rename_table!!

  • Migraes

    Types::binary!:boolean!:date!:datetime!:decimal!:float!:integer!:primary_key!:string!:text!:time!:timestamp!

  • O mais importante

    Executando migraes

    !

    !

    Voltando uma migrao

    $ rake db:migrate !

    $ rake db:migrate VERSION=20080906120000

    $ rake db:rollback !$ rake db:rollback STEP=3

  • E finalmente, criando uma migrao

    Com o model$ rails generate model Product name:string description:text !# Gera class CreateProducts < ActiveRecord::Migration def change create_table :products do |t| t.string :name t.text :description t.timestamps end end end !

  • E finalmente, criando uma migrao

    Uma migrao por si s

    !

    !

    !

    Convenes facilitam a criao

    $ rails generate migration AddPartNumberToProducts !# Gera class AddPartNumberToProducts < ActiveRecord::Migration def change end end

    $ rails generate migration AddPartNumberToProducts part_number:string !class AddPartNumberToProducts < ActiveRecord::Migration def change add_column :products, :part_number, :string end end !

  • Validaes

  • Viso geral

    Garante que apenas dados vlidos sero inseridos no banco de dados

    Existem diversos meios de garantir a validao de um dado:

    restries no banco de dados

    validaes em client-side

    validaes em controladores

    validaes em modelo

  • Viso Geral

    Vamos nos concentrar em modelos, o jeito Rails de fazer validaes

  • Quando uma validao acontece?

    Antes que os objetos sejam salvos no banco de dados

    Mtodos que disparam validaescreate!create!!save!save!!update!update_attributes!update_attributes!!

  • Exemplo de uso

    valid? e invalid?class Person < ActiveRecord::Base validates :name, :presence: true end >> p = Person.new => # >> p.errors => {} >> p.valid? => false >> p.errors => {name:["can't be blank"]} >> p = Person.create => # >> p.errors => {name:["can't be blank"]} >> p.save => false >> p.save! => ActiveRecord::RecordInvalid: Validation failed: Name can't be blank

  • Validations Helpers

    Aceitaoclass Person < ActiveRecord::Base validates :terms_of_service, acceptance: true end

    class Library < ActiveRecord::Base has_many :books validates_associated :books end

    class Person < ActiveRecord::Base validates :email, confirmation: true validates :email_confirmation, presence: true end

    Valida modelos associados

    Confirmao e Presena

  • Validations Helpers

    Exclusoclass Account < ActiveRecord::Base validates :subdomain, exclusion: { in: %w(www us ca jp), message: "Subdomain %{value} is reserved." } end

    class Product < ActiveRecord::Base validates :legacy_code, format: { with: /\A[a-zA-Z]+\z/, message: "Only letters allowed" } end

    class Coffee < ActiveRecord::Base validates :size, inclusion: { in: %w(small medium large), message: "%{value} is not a valid size" } end

    Formatao

    Incluso

  • Validations Helpers

    Tamanhoclass Person < ActiveRecord::Base validates :name, length: { minimum: 2, maximum: 500 } validates :password, length: { in: 6..20 } validates :registration_number, length: { is: 6 } end

    class Player < ActiveRecord::Base validates :points, numericality: true validates :games_played, numericality: { only_integer: true } end

    class Account < ActiveRecord::Base validates :email, uniqueness: true end

    Numerao

    Unicidade

  • Associaes

  • Viso Geral

    Relacionamentos/associaes so parte central dos bancos de dados relacionais

    ActiveRecord facilita as interaes entre modelos

  • Exemplo de uso

    class Customer < ActiveRecord::Base has_many :orders, dependent: :destroy end class Order < ActiveRecord::Base belongs_to :customer end !# rails console $ @orders = @customer.orders $ @costumer = @order.customer !

  • Tipos de associaes

    Tipos:

    belongs_to!has_one!has_many!has_many :through!has_one :through!has_and_belongs_to_many!

  • Exerccio

  • Casos de uso

    O usurio, possui nome, e-mail, sobrenome, idade

    O usurio no existe sem nome e e-mail

    O e-mail deve ser formatado de maneira correta

    Um usurio possui vrios livros

  • Casos de uso

    O livro deve ter nome e pode ter edio

    Os livros no existem sem os usurios

    Deve ser possvel consultar os 5 livros mais recentes de um usurio

  • Referncias

    Rails Guides - http://guides.rubyonrails.org/

    Ruby on Rails Tutorial - http://ruby.railstutorial.org/

    Design Patterns in Ruby - Russ Olsen

  • Obrigado!