我正在阅读Rails 3的Rails指南,他们使用这种方法:
cattr_accessor :attribute这个方法是什么?它是一种Rails方法吗?我以前从来没见过。
发布于 2010-08-05 11:00:13
这是rails的事情。基本上类似于attr_*方法,但用于类级别。你不会想到的一件事是因为它使用了一个后备的@@变量,这个值在类和所有实例之间共享。
class Foo
cattr_accessor :bar
end
# => [:bar]
foo1 = Foo.new
# => #<Foo:0x4874d90>
foo2 = Foo.new
# => #<Foo:0x4871d48>
foo1.bar = 'set from instance'
# => "set from instance"
foo2.bar
# => "set from instance"
Foo.bar
# => "set from instance" 发布于 2011-07-26 00:28:28
对于那些也遇到这个问题的人来说,在Rails 3中有一种新的方法可以做到这一点,它适用于子类:
class_attribute :name在it here上有一篇很好的博客文章。
发布于 2015-05-29 23:18:31
定义类属性的类访问器和实例访问器
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]但对于Rails 4+,请使用类似的方法mattr_accessor,因为cattr_accessor在rails 4中已弃用
https://stackoverflow.com/questions/3411403
复制相似问题