Rails 2.2: Tornando atributos do ActiveRecord privados

14 de novembro de 2008  |  Rails 2.2  | 

No Rails 2.2 você poderá definir atributos do ActiveRecord como private. Como estes atributos são criados via metaprogramação, até agora isto era impossível.

Para entender como isto funcionará, vamos tornar o atributo name da classe User privado:

class User < ActiveRecord::Base

  private
  def name
    "I'm private"
  end

end

Agora ao tentar recuperar o valor do atributo name:

user = User.first
# => #<User id: 1, name: "teste", created_at: "2008-09-26 21:55:23", updated_at: "2008-09-26 21:55:23">

user.name
# => NoMethodError: undefined method `NoMethodError' for #<User:0x234df08>
#    from /Users/carlosbrando/Projects/sandbox/edge/vendor/rails/activerecord/lib/active_record/attribute_methods.rb:260:in `method_missing'
#    from /Users/carlosbrando/Projects/sandbox/edge/vendor/rails/activerecord/lib/active_record/attribute_methods.rb:236:in `method_missing'
#    from (irb):3

Veja que uma exceção NoMethodError foi disparada ao executar o método que agora é privado. Por outro lado eu posso alterar o nome do usuário, já que o método name= ainda é público.

user.name = "Carlos"
# => "Carlos"

Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. Você pode encontrar mais detalhes sobre esta e outras novidades do Rails 2.2 no e-book “Ruby on Rails – O que há de novo?“.



1 Comentário


  1. attr_reader :name faz a mesma coisa só que não dá raise

Deixe um comentário