cattr_accessor в Rails? - PullRequest
       5

cattr_accessor в Rails?

25 голосов
/ 05 августа 2010

Я читаю руководства по Rails для Rails 3, и они используют этот метод:

cattr_accessor :attribute

Что это за метод?Это метод Rails?Я никогда не видел это раньше.

Ответы [ 4 ]

41 голосов
/ 05 августа 2010

Это вещь рельсов.В основном как методы 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" 
15 голосов
/ 25 июля 2011

Для тех, кто сталкивается с этим вопросом, есть новый способ сделать это в Rails 3, который работает для подклассов:

class_attribute :name

Хороший пост в блоге здесь .

6 голосов
/ 29 мая 2015

Определяет методы доступа к классу и экземпляру для атрибутов класса

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

0 голосов
/ 04 февраля 2016

Это не рекомендуется в последней версии Rails. http://apidock.com/rails/Class/cattr_accessor

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...