Im lectura de los rieles guía para carriles 3 y que utilizan este método:cattr_accessor en Rails?
cattr_accessor :attribute
¿Qué es este método? ¿Es un método Rails? Nunca lo había visto antes
Im lectura de los rieles guía para carriles 3 y que utilizan este método:cattr_accessor en Rails?
cattr_accessor :attribute
¿Qué es este método? ¿Es un método Rails? Nunca lo había visto antes
Es una cosa de rieles. Básicamente me gusta los métodos attr_ *, pero para el nivel de clase. Una cosa que no esperaría es que utiliza una variable de respaldo @@, el valor compartido entre la clase y todas las instancias.
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"
Para aquellos que tropiezan a través de esta pregunta también, hay una nueva manera de hacer esto en Rails 3 que funciona para subclases:
class_attribute :name
Un buen blog el que here.
define tanto descriptores de acceso de clase e instancia para los atributos de la clase
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]
Si una subclase cambia el valor a continuación, que también cambie el valor de la clase padre. De manera similar, si la clase principal cambia el valor, eso también cambiaría el valor de las subclases.
class Male < Person
end
Male.hair_colors << :blue
Person.hair_colors # => [:brown, :black, :blonde, :red, :blue]
pero para rieles 4+ utilizan método similar mattr_accessor, como cattr_accessor está en desuso en los carriles 4
Esto se ha de utilizarse en la reciente versión Rails. http://apidock.com/rails/Class/cattr_accessor
¡Muchas gracias! No pude encontrar ese método en la documentación actual de la API por lo que tiene que estar en Rails 3 solamente? –
de acuerdo con apidock.com, ha estado presente desde 2.1 :) –
Sería bueno mencionar que 'class_attribute' es típicamente una mejor solución –