• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Active record
 

Active record

on

  • 1,715 views

 

Statistics

Views

Total Views
1,715
Views on SlideShare
1,694
Embed Views
21

Actions

Likes
2
Downloads
32
Comments
0

2 Embeds 21

http://www.slideshare.net 20
http://duckduckgo.com 1

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />

Active record Active record Presentation Transcript

  • Active Record Conhecendo melhor sua ferramenta de persistência Anderson Leite @anderson_leite www.andersonleite.com.br anderson.leite@caelum.com.br
  • RR-71 RR-75
  • Active Record [ORM]
  • SHOW ME THE CODE!
  • app/models
  • app/models class Participante < ActiveRecord::Base end
  • app/models class Participante < ActiveRecord::Base end participante = Participante.new
  • app/models class Participante < ActiveRecord::Base end participante = Participante.new participante.nome = ‘Anderson’
  • Metaprogramação
  • Metaprogramação Open Classes
  • Metaprogramação Open Classes Monkeypatch
  • Metaprogramação Open Classes Monkeypatch Method Missing
  • Metaprogramação Open Classes Monkeypatch Mimic Mehods Method Missing
  • Metaprogramação Open Classes Ghost Methods Monkeypatch Mimic Mehods Method Missing
  • class Aluno end
  • class Aluno end
  • class Aluno aluno = Aluno.new end
  • class Aluno aluno = Aluno.new end aluno.fala()
  • class Aluno aluno = Aluno.new end aluno.fala() NoMethodError
  • class Aluno aluno = Aluno.new end aluno.fala() NoMethodError class Escola def ensina(aluno) def aluno.fala puts “falando!” end end end
  • class Aluno aluno = Aluno.new end aluno.fala() NoMethodError class Escola def ensina(aluno) def aluno.fala puts “falando!” end end end
  • class Aluno aluno = Aluno.new end aluno.fala() NoMethodError class Escola def ensina(aluno) escola = Escola.new def aluno.fala puts “falando!” end end end
  • class Aluno aluno = Aluno.new end aluno.fala() NoMethodError class Escola def ensina(aluno) escola = Escola.new def aluno.fala escola.ensina(aluno) puts “falando!” end end end
  • class Aluno aluno = Aluno.new end aluno.fala() NoMethodError class Escola def ensina(aluno) escola = Escola.new def aluno.fala escola.ensina(aluno) puts “falando!” end aluno.fala() end end
  • class Aluno aluno = Aluno.new end aluno.fala() NoMethodError class Escola def ensina(aluno) escola = Escola.new def aluno.fala escola.ensina(aluno) puts “falando!” end aluno.fala() end #=> falando! end
  • Open Classes class Aluno aluno = Aluno.new end aluno.fala() NoMethodError class Escola def ensina(aluno) escola = Escola.new def aluno.fala escola.ensina(aluno) puts “falando!” end aluno.fala() end #=> falando! end
  • Aluno
  • aluno Aluno
  • aluno Aluno
  • aluno Aluno #aluno fala
  • aluno Aluno #aluno fala
  • aluno Aluno #aluno fala
  • aluno Aluno #aluno fala
  • aluno Aluno aluno2 #aluno fala
  • aluno Aluno aluno2 #aluno fala
  • Eigenclass aluno Aluno aluno2 #aluno fala
  • app/models class Participante < ActiveRecord::Base end participante = Participante.new participante.nome = ‘Anderson’
  • BD
  • BD
  • BD Colunas
  • BD Colunas Open Classes
  • BD Colunas Open Classes def nome=(nome) @nome = nome end
  • BD Colunas Open Classes def nome=(nome) def nome @nome = nome @nome end end
  • Dynamic Attributes
  • Dynamic Attributes Mimic Methods
  • Dynamic Attributes Mimic Methods
  • Dynamic Attributes Mimic Methods activerecord-2.3.5/lib/active_record/attribute_methods.rb
  • Dynamic Attributes Validations Dynamic Finders
  • Dynamic Attributes Validations Dynamic Finders
  • SHOW ME THE CODE!
  • class Participante < ActiveRecord::Base validate :primeira_letra_maiuscula private def primeira_letra_maiuscula errors.add(...) unless nome =~ /[A-Z].*/ end end
  • class Participante < ActiveRecord::Base validates_presence_of :nome validates_length_of :nome, :minimum => 6 end
  • class Aluno end
  • class Aluno end
  • class Aluno ruby aluno.rb end
  • class Aluno ruby aluno.rb end class Aluno puts “teste” end
  • class Aluno ruby aluno.rb end class Aluno puts “teste” end
  • class Aluno ruby aluno.rb end class Aluno ruby aluno.rb puts “teste” end
  • class Aluno ruby aluno.rb end class Aluno ruby aluno.rb puts “teste” #=> teste end
  • class Participante < ActiveRecord::Base validates_presence_of :nome validates_length_of :nome, :minimum => 6 end
  • class Participante < ActiveRecord::Base validates_presence_of :nome validates_length_of :nome, :minimum => 6 end participante.save
  • onde?
  • onde? rails/active_record/lib/active_record/base.rb
  • onde? rails/active_record/lib/active_record/base.rb
  • onde? rails/active_record/lib/active_record/base.rb não...
  • rails/active_record/lib/active_record.rb
  • rails/active_record/lib/active_record.rb
  • rails/active_record/lib/active_record.rb
  • autoload?
  • rails/active_record/lib/active_record/base.rb
  • include + autoload
  • include + autoload mas o que ele faz?
  • module ActiveRecord module Validations def self.included(base)
  • module ActiveRecord module Validations def self.included(base) alias_method_chain :save, :validation
  • module ActiveRecord module Validations def self.included(base) alias_method_chain :save, :validation 1) autoload
  • module ActiveRecord module Validations def self.included(base) alias_method_chain :save, :validation 1) autoload 2) include
  • module ActiveRecord module Validations def self.included(base) alias_method_chain :save, :validation 1) autoload 2) include 3) filtra o método save
  • validates_size_of validates_uniqueness_of validates_format_of validates_numericality_of validates_acceptance_of validates_associated validates_confirmation_of validates_each validates_exclusion_of validates_inclusion_of validates_length_of validates_presence_of
  • algumas conclusões até aqui...
  • algumas conclusões até aqui... metaprogramação
  • algumas conclusões até aqui... metaprogramação Monkeypatch
  • algumas conclusões até aqui... metaprogramação Monkeypatch boas práticas
  • algumas conclusões até aqui... metaprogramação Monkeypatch boas práticas módulos
  • Dynamic Attributes Validations Dynamic Finders
  • SHOW ME THE CODE!
  • autoload ? include ?
  • autoload ? include ? find_all_by_nome
  • autoload ? include ? find_all_by_nome find_all_by_email
  • autoload ? include ? find_all_by_nome find_all_by_email find_all_by_nome_and_email
  • class Aluno end
  • class Aluno end
  • class Aluno class Aluno def method_missing() end #... end end
  • class Aluno class Aluno def method_missing() end #... end end aluno = Aluno.new
  • class Aluno class Aluno def method_missing() end #... end end aluno = Aluno.new aluno.estuda()
  • def method_missing(name, *args) end
  • def method_missing(name, *args) end CoC
  • def method_missing(name, *args) end CoC Participante.find_all_by_nome(“Anderson”)
  • def method_missing(name, *args) end CoC Participante.find_all_by_nome(“Anderson”)
  • def method_missing(name, *args) end CoC Participante.find_all_by_nome(“Anderson”) select * from Participante where nome= ‘Anderson’
  • Ghost Methods
  • Dynamic Attributes Validations Dynamic Finders
  • E agora ...pra onde ir ? > Ajax > Plugins > Testes RR-71 RR-75
  • Obrigado! Anderson Leite @anderson_leite www.andersonleite.com.br anderson.leite@caelum.com.br