即時閱讀Rails的指導爲Rails 3,他們用這個方法:cattr_accessor in Rails?
cattr_accessor :attribute
這是什麼方法?它是一個Rails方法嗎?我從來沒有見過它。
即時閱讀Rails的指導爲Rails 3,他們用這個方法:cattr_accessor in Rails?
cattr_accessor :attribute
這是什麼方法?它是一個Rails方法嗎?我從來沒有見過它。
這是一個鐵軌的事情。基本上像attr_ *方法,但對於課程級別。有一件事情你不會期望是因爲它使用了一個支持@@變量,即類和所有實例之間共享的值。
ree-1.8.7-2010.02 > class Foo
ree-1.8.7-2010.02 ?> cattr_accessor :bar
ree-1.8.7-2010.02 ?> end
=> [:bar]
ree-1.8.7-2010.02 > foo1 = Foo.new
=> #<Foo:0x4874d90>
ree-1.8.7-2010.02 > foo2 = Foo.new
=> #<Foo:0x4871d48>
ree-1.8.7-2010.02 > foo1.bar = 'set from instance'
=> "set from instance"
ree-1.8.7-2010.02 > foo2.bar
=> "set from instance"
ree-1.8.7-2010.02 > Foo.bar
=> "set from instance"
定義類屬性
class Person
cattr_accessor :hair_colors
end
Person.hair_colors = [:brown, :black, :blonde, :red]
Person.hair_colors # => [:brown, :black, :blonde, :red]
Person.new.hair_colors # => [:brown, :black, :blonde, :red]
如果子類改變了值,那麼這也將改變父類的價值既類和實例訪問器。同樣,如果父類更改該值,那麼也會更改子類的值。
class Male < Person
end
Male.hair_colors << :blue
Person.hair_colors # => [:brown, :black, :blonde, :red, :blue]
但4+使用類似的方法mattr_accessor,如cattr_accessor在軌道4,5
這已被棄用棄用,最近的Rails版本的Rails。 http://apidock.com/rails/Class/cattr_accessor
非常感謝!我在當前的API文檔中找不到該方法,因此它只能在Rails 3中使用? – 2010-08-05 03:10:13
根據apidock.com,它自2.1起:) :) – 2010-08-05 03:13:12
會很好的提及'class_attribute'通常是一個更好的解決方案 – 2013-02-10 20:32:11