Вы используете нечетный метод назначения в вашем обратном вызове after_initialize.Вам просто нужно присвоить self.hello_world или даже @hello_world.Ваше назначение создало хеш в вашем экземпляре класса с ключом: hello_world и значением, как и ожидалось.По вашему мнению, вы можете ссылаться на @mymodel [: hello_world], но это далеко не идиоматично.
В следующем примере модели и сеанса консоли показано влияние использования различных методов инициализации виртуального атрибута.
class Blog < ActiveRecord::Base
attr_accessor :hello_world1, :hello_world2, :hello_world3
def after_initialize
self.hello_world1 = "Hello World 1"
self[:hello_world2] = "Hello World 2"
@hello_world3 = "Hello World 3"
end
end
ruby-1.9.2-p0 > b=Blog.new
=> #<Blog id: nil, title: nil, content: nil, created_at: nil, updated_at: nil>
ruby-1.9.2-p0 > b.hello_world1
=> "Hello World 1"
ruby-1.9.2-p0 > b.hello_world3
=> "Hello World 3"
ruby-1.9.2-p0 > b.hello_world2
=> nil
ruby-1.9.2-p0 > b[:hello_world2]
=> "Hello World 2"
ruby-1.9.2-p0 > b[:hello_world1]
=> nil