?
Удалить attr_accessor :delicious
.attribute
определит методы получения и установки.
Некоторый анализ:
attr_accessor
Методы получения и установки определены непосредственно в Fruit
.
1| class Fruit
2| attr_accessor :delicious
3| end
method = Fruit.new.method(:delicious)
method.owner # => Fruit
method.source_location # => ['/path/to/fruit.rb', 2]
attribute
Методы получения и установки определены для экземпляра анонимного модуля, который Fruit
использует для поиска метода.
1| class Fruit
2| attribute :delicious
3| end
method = Fruit.new.method(:delicious)
mod = method.owner # => #<Module:0x00007fc583da1f60>
Fruit.ancestors.include?(mod) # => true
method.source_location # => ['/path/to/active_model/attribute_methods.rb', 36]
При использовании обоих attr_accessor
и attribute
, Fruit
вызовут более непосредственные методы получения и установки: те, которые определены как attr_accessor
.
1| class Fruit
2| attr_accessor :delicious
3| attribute :delicious
4| end
method = Fruit.new.method(:delicious)
method.owner # => Fruit
method.source_location # => ['/path/to/fruit.rb', 2]