ActiveRecord 似乎定义实例方法与 attr_accessor 不同。
attr_accessor 似乎没有为我新定义的属性定义一个超级方法:
class SomeClass
attr_accessor :some_attribute
def some_attribute
super
end
end
>> some_class = SomeClass.new
>> some_class.some_attribute
NoMethodError: super: no superclass method `some_attribute' for..
而ActiveRecord 明确定义了一个超级方法:
class SomeClass < ActiveRecord::Base
# some_attribute is now a column in our database
def some_attribute
super
end
end
>> some_class = SomeClass.new
>> some_class.some_attribute
nil
两者的区别在哪里?有没有办法让 attr_accessor 定义一个超级方法?
编辑:
我仍然不知道 ActiveRecord 如何定义它的方法,但我知道 attr_accessor 是如何做到的。而不是super
我可以使用@some_attribute
,因为它将值存储在同名的全局变量中:https ://stackoverflow.com/a/4371458/586000