由attr_accessor创建的方法不适用于子类

时间:2009-08-21 19:18:56

标签: ruby

http://gist.github.com/172341(stackoverflow打破了格式化)

在以下情况中,由Human创建的方法名称不适用于Boy。我的理解是否正确attr_accessor方法不是 可用于子类。我需要使用超类来访问attr_accessor添加的方法。

3 个答案:

答案 0 :(得分:1)

您正在寻找的是cattr_accessor,它修复了这个特定的问题:

http://apidock.com/rails/Class/cattr_accessor

这是你的例子,修复:

class Human
  def self.age
    @age = 50
  end
  def self.age=(input)
    @age = input
  end

  cattr_accessor :name

  self.name = 'human'
end
class Boy < Human
end

puts Human.age
puts Boy.age
puts Human.name
puts Boy.superclass.name
puts Boy.name # => 'human'

答案 1 :(得分:1)

人类和男孩是两个不同的对象。两个对象永远不能共享一个实例变量。他们都有方法,但该方法将访问对象的相应ivar。

答案 2 :(得分:0)

在这种情况下,

Rails class_attribute方法会更好。

Rails Guide