3

私の Ruby on Rails アプリケーションには、クラスの小さな階層があります。子クラスに継承させたい情報を含むクラスを記述するサポートに懸念を追加しようとしました。この問題は、次の小さなサンプルで説明できます。

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}

クラスの継承を希望どおりに機能させるにはどうすればよいですか?

4

1 に答える 1