formação ruby & redu :: ruby on rails
DESCRIPTION
Introdução ao Rails, componentes, instalação, Referências e etc.TRANSCRIPT
-
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!