У меня есть небольшая иерархия классов в моем приложении Ruby on Rails. Я попытался добавить беспокойство в поддержку описаний классов с некоторой информацией, которую я хотел бы наследовать дочерними классами. Проблема может быть проиллюстрирована с этой небольшой выборке:Как наследовать методы класса с помощью ActiveSupport :: Концерн
module Translatable
extend ActiveSupport::Concern
included do
end
module ClassMethods
def add_translatable_fields(field_and_types)
@translatable_fields ||= {}
@translatable_fields.merge! field_and_types
end
def translatable_fields
@translatable_fields
end
end
end
class Item
include Translatable
add_translatable_fields({name: :string})
end
class ChildItem < Item
end
class AnotherItem < Item
add_translatable_fields({description: :text})
end
puts "Item => #{Item.translatable_fields.inspect}"
puts "ChildItem => #{ChildItem.translatable_fields.inspect}"
puts "AnotherItem => #{AnotherItem.translatable_fields.inspect}"
Я бы, как этот образец кода, чтобы вернуть
Item => {name: :string}
ChildItem => {name: :string}
AnotherItem => {name: :string, description: :text}
Но, к сожалению, ChildItem и AnotherItem не добавляет класс «свойства», установленные на родительский класс и вместо этого возвращает
Item => {name: :string}
ChildItem => nil
AnotherItem => {description: :text}
Как я могу сделать работу наследования класса так, как я ее хочу?
спасибо @evanbikes! помощник 'class_attribute' - это то, что мне нужно для достижения чего-то очень похожего! – Dorian