Active record

1,362 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,362
On SlideShare
0
From Embeds
0
Number of Embeds
28
Actions
Shares
0
Downloads
35
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide







































































































  • 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

    ×