У меня есть класс (ActorClue), в котором определены три атрибута attr_accessor. Есть пара других общих полей, необходимых для других классов, поэтому я поместил эти общие поля в модуль (BaseClueProperties). Я включаю этот модуль в свой класс ActorClue.
Вот пример кода:
module BaseClueProperties
attr_accessor :image_url
attr_accessor :summary_text
end
################
class BaseClue
# http://stackoverflow.com/questions/2487333/fastest-one-liner-way-to-list-attr-accessors in-ruby
def self.attr_accessor(*vars)
@attributes ||= []
@attributes.concat vars
super(*vars)
end
def self.attributes
@attributes
end
def attributes
self.class.attributes
end
end
###############
class ActorClue < BaseClue
attr_accessor :actor_name
attr_accessor :movie_name
attr_accessor :directed_by
include BaseClueProperties
.....
end
Я приведу вышеизложенное со следующим:
>> gg = ActorClue.new
=> #<ActorClue:0x23bf784>
>> gg.attributes
=> [:actor_name, :movie_name, :directed_by]
Почему он возвращает только: actor_name,: movie_name и: Direct_by и не включает: image_url и: summary_text?
Я изменил свойства BaseClueProperties следующим образом:
module BaseClueProperties
BaseClue.attr_accessor :image_url
BaseClue.attr_accessor :summary_text
end
Но все же с тем же результатом.
Есть какие-нибудь мысли о том, почему атрибуты my: image_url и: summary_text не добавляются в мою коллекцию @attributes?