在Rails中cattr_accessor?
我正在阅读Rails 3的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 => # ree-1.8.7-2010.02 > foo2 = Foo.new => # 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"
对于那些偶然遇到这个问题的人来说,在Rails 3中有一种新方法可以用于子类:
class_attribute :name
这里有一篇很好的博客文章。
为类属性定义类和实例访问器
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中已弃用
这在最近的Rails版本中已被弃用。 http://apidock.com/rails/Class/cattr_accessor
- 将Facebook元标记放在Rails应用程序中
- “没有加载postgresql gem”错误在Heroku上部署Ruby on Rails应用程序
- date_select的多参数属性错误
- 在rails应用程序中未初始化的常量YoutubeIt
- Rails是否可以防止通过javascript读取本地json文件?
- Google表格API v4 service_account – 禁止:来电者没有权限(Google :: Apis :: ClientError)
- Rails:获取来自数据库的对象的所有字段
- 使用url重定向的rails handle 404
- 如何使will_paginate的命令与这个array.map一起使用?