Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Active record

1,450 views

Published on

Published in: Technology
  • Be the first to comment

Active record

  1. 1. Active Record Conhecendo melhor sua ferramenta de persistência Anderson Leite @anderson_leite www.andersonleite.com.br anderson.leite@caelum.com.br
  2. 2. RR-71 RR-75
  3. 3. Active Record [ORM]
  4. 4. SHOW ME THE CODE!
  5. 5. app/models
  6. 6. app/models class Participante < ActiveRecord::Base end
  7. 7. app/models class Participante < ActiveRecord::Base end participante = Participante.new
  8. 8. app/models class Participante < ActiveRecord::Base end participante = Participante.new participante.nome = ‘Anderson’
  9. 9. Metaprogramação
  10. 10. Metaprogramação Open Classes
  11. 11. Metaprogramação Open Classes Monkeypatch
  12. 12. Metaprogramação Open Classes Monkeypatch Method Missing
  13. 13. Metaprogramação Open Classes Monkeypatch Mimic Mehods Method Missing
  14. 14. Metaprogramação Open Classes Ghost Methods Monkeypatch Mimic Mehods Method Missing
  15. 15. class Aluno end
  16. 16. class Aluno end
  17. 17. class Aluno aluno = Aluno.new end
  18. 18. class Aluno aluno = Aluno.new end aluno.fala()
  19. 19. class Aluno aluno = Aluno.new end aluno.fala() NoMethodError
  20. 20. class Aluno aluno = Aluno.new end aluno.fala() NoMethodError class Escola def ensina(aluno) def aluno.fala puts “falando!” end end end
  21. 21. class Aluno aluno = Aluno.new end aluno.fala() NoMethodError class Escola def ensina(aluno) def aluno.fala puts “falando!” end end end
  22. 22. 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
  23. 23. 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
  24. 24. 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
  25. 25. 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
  26. 26. 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
  27. 27. Aluno
  28. 28. aluno Aluno
  29. 29. aluno Aluno
  30. 30. aluno Aluno #aluno fala
  31. 31. aluno Aluno #aluno fala
  32. 32. aluno Aluno #aluno fala
  33. 33. aluno Aluno #aluno fala
  34. 34. aluno Aluno aluno2 #aluno fala
  35. 35. aluno Aluno aluno2 #aluno fala
  36. 36. Eigenclass aluno Aluno aluno2 #aluno fala
  37. 37. app/models class Participante < ActiveRecord::Base end participante = Participante.new participante.nome = ‘Anderson’
  38. 38. BD
  39. 39. BD
  40. 40. BD Colunas
  41. 41. BD Colunas Open Classes
  42. 42. BD Colunas Open Classes def nome=(nome) @nome = nome end
  43. 43. BD Colunas Open Classes def nome=(nome) def nome @nome = nome @nome end end
  44. 44. Dynamic Attributes
  45. 45. Dynamic Attributes Mimic Methods
  46. 46. Dynamic Attributes Mimic Methods
  47. 47. Dynamic Attributes Mimic Methods activerecord-2.3.5/lib/active_record/attribute_methods.rb
  48. 48. Dynamic Attributes Validations Dynamic Finders
  49. 49. Dynamic Attributes Validations Dynamic Finders
  50. 50. SHOW ME THE CODE!
  51. 51. class Participante < ActiveRecord::Base validate :primeira_letra_maiuscula private def primeira_letra_maiuscula errors.add(...) unless nome =~ /[A-Z].*/ end end
  52. 52. class Participante < ActiveRecord::Base validates_presence_of :nome validates_length_of :nome, :minimum => 6 end
  53. 53. class Aluno end
  54. 54. class Aluno end
  55. 55. class Aluno ruby aluno.rb end
  56. 56. class Aluno ruby aluno.rb end class Aluno puts “teste” end
  57. 57. class Aluno ruby aluno.rb end class Aluno puts “teste” end
  58. 58. class Aluno ruby aluno.rb end class Aluno ruby aluno.rb puts “teste” end
  59. 59. class Aluno ruby aluno.rb end class Aluno ruby aluno.rb puts “teste” #=> teste end
  60. 60. class Participante < ActiveRecord::Base validates_presence_of :nome validates_length_of :nome, :minimum => 6 end
  61. 61. class Participante < ActiveRecord::Base validates_presence_of :nome validates_length_of :nome, :minimum => 6 end participante.save
  62. 62. onde?
  63. 63. onde? rails/active_record/lib/active_record/base.rb
  64. 64. onde? rails/active_record/lib/active_record/base.rb
  65. 65. onde? rails/active_record/lib/active_record/base.rb não...
  66. 66. rails/active_record/lib/active_record.rb
  67. 67. rails/active_record/lib/active_record.rb
  68. 68. rails/active_record/lib/active_record.rb
  69. 69. autoload?
  70. 70. rails/active_record/lib/active_record/base.rb
  71. 71. include + autoload
  72. 72. include + autoload mas o que ele faz?
  73. 73. module ActiveRecord module Validations def self.included(base)
  74. 74. module ActiveRecord module Validations def self.included(base) alias_method_chain :save, :validation
  75. 75. module ActiveRecord module Validations def self.included(base) alias_method_chain :save, :validation 1) autoload
  76. 76. module ActiveRecord module Validations def self.included(base) alias_method_chain :save, :validation 1) autoload 2) include
  77. 77. module ActiveRecord module Validations def self.included(base) alias_method_chain :save, :validation 1) autoload 2) include 3) filtra o método save
  78. 78. 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
  79. 79. algumas conclusões até aqui...
  80. 80. algumas conclusões até aqui... metaprogramação
  81. 81. algumas conclusões até aqui... metaprogramação Monkeypatch
  82. 82. algumas conclusões até aqui... metaprogramação Monkeypatch boas práticas
  83. 83. algumas conclusões até aqui... metaprogramação Monkeypatch boas práticas módulos
  84. 84. Dynamic Attributes Validations Dynamic Finders
  85. 85. SHOW ME THE CODE!
  86. 86. autoload ? include ?
  87. 87. autoload ? include ? find_all_by_nome
  88. 88. autoload ? include ? find_all_by_nome find_all_by_email
  89. 89. autoload ? include ? find_all_by_nome find_all_by_email find_all_by_nome_and_email
  90. 90. class Aluno end
  91. 91. class Aluno end
  92. 92. class Aluno class Aluno def method_missing() end #... end end
  93. 93. class Aluno class Aluno def method_missing() end #... end end aluno = Aluno.new
  94. 94. class Aluno class Aluno def method_missing() end #... end end aluno = Aluno.new aluno.estuda()
  95. 95. def method_missing(name, *args) end
  96. 96. def method_missing(name, *args) end CoC
  97. 97. def method_missing(name, *args) end CoC Participante.find_all_by_nome(“Anderson”)
  98. 98. def method_missing(name, *args) end CoC Participante.find_all_by_nome(“Anderson”)
  99. 99. def method_missing(name, *args) end CoC Participante.find_all_by_nome(“Anderson”) select * from Participante where nome= ‘Anderson’
  100. 100. Ghost Methods
  101. 101. Dynamic Attributes Validations Dynamic Finders
  102. 102. E agora ...pra onde ir ? > Ajax > Plugins > Testes RR-71 RR-75
  103. 103. Obrigado! Anderson Leite @anderson_leite www.andersonleite.com.br anderson.leite@caelum.com.br

×