Active Record é um ORM que mapeia objetos da aplicação para registros em uma base de dados relacional usando metaprogramação. Ele provê funcionalidades como dynamic attributes, validations e dynamic finders através de métodos como method_missing e open classes. Isso permite definir comportamentos de forma declarativa ao invés de imperativa.
25. class Aluno aluno = Aluno.new
end aluno.fala()
26. class Aluno aluno = Aluno.new
end aluno.fala()
NoMethodError
27. class Aluno aluno = Aluno.new
end aluno.fala()
NoMethodError
class Escola
def ensina(aluno)
def aluno.fala
puts “falando!”
end
end
end
28. class Aluno aluno = Aluno.new
end aluno.fala()
NoMethodError
class Escola
def ensina(aluno)
def aluno.fala
puts “falando!”
end
end
end
29. 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
30. 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
31. 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
32. 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
33. 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
63. class Participante < ActiveRecord::Base
validate :primeira_letra_maiuscula
private
def primeira_letra_maiuscula
errors.add(...) unless nome =~ /[A-Z].*/
end
end
64. class Participante < ActiveRecord::Base
validates_presence_of :nome
validates_length_of :nome, :minimum => 6
end