Isso me picou outro dia .. Usar o operador de atribuição condicional (|| =) cria uma variável local.
class Foo
def bar
# creates local variable, shadowing private #priv()
priv ||= 1
end
def baz
# priv invokes private #priv()
puts priv.inspect
end
private
attr_accessor :priv
end
Você deve usar @priv ||= 1
ou tornar o attr_accessor :priv
protegido em vez de privado e usar self.priv ||= 1
.