0

after_initializeメソッドで仮想属性に値を割り当てることができません。

attr_accessor :hello_world

def after_initialize
   self[:hello_world] = "hello world"
end

私のビューファイル:

hello world defaulted? <%= @mymodel.hello_world %>

これは出力を返しません。
仮想属性のデフォルト値を設定するための提案や代替案はありますか?

4

1 に答える 1

4

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
于 2010-11-09T09:57:26.780 に答える