首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails中的cattr_accessor?

Rails中的cattr_accessor?
EN

Stack Overflow用户
提问于 2010-08-05 10:44:44
回答 4查看 12.9K关注 0票数 28

我正在阅读Rails 3的Rails指南,他们使用这种方法:

代码语言:javascript
复制
cattr_accessor :attribute

这个方法是什么?它是一种Rails方法吗?我以前从来没见过。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-08-05 11:00:13

这是rails的事情。基本上类似于attr_*方法,但用于类级别。你不会想到的一件事是因为它使用了一个后备的@@变量,这个值在类和所有实例之间共享。

代码语言:javascript
复制
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" 
票数 43
EN

Stack Overflow用户

发布于 2011-07-26 00:28:28

对于那些也遇到这个问题的人来说,在Rails 3中有一种新的方法可以做到这一点,它适用于子类:

代码语言:javascript
复制
class_attribute :name

在it here上有一篇很好的博客文章。

票数 16
EN

Stack Overflow用户

发布于 2015-05-29 23:18:31

定义类属性的类访问器和实例访问器

代码语言:javascript
复制
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]

如果一个子类改变了这个值,那么父类的值也会随之改变。类似地,如果父类改变了值,那么子类的值也会随之改变。

代码语言:javascript
复制
class Male < Person
end

Male.hair_colors << :blue
Person.hair_colors # => [:brown, :black, :blonde, :red, :blue]

但对于Rails 4+,请使用类似的方法mattr_accessor,因为cattr_accessor在rails 4中已弃用

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3411403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档