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
使用できます: https://stackoverflow.com/a/4371458/586000@some_attribute