1
私はGrape APIを使っています。私は、エンドポイントを動的にマウントするために使用しているurl属性を持つモデルを持っています。私はそれらをバージョンアップできるようにする必要があり、生成されたときに名前空間が正しくなるようにするのは難しいです。モジュールネームスペース内で動的に名前付きクラスを作成する
モジュール内にクラスを作成すると、そのクラスは名前空間になります。
module MyModule
module SubModule
class MyClass
end
end
end
=> nil
MyModule::SubModule::MyClass
=> MyModule::SubModule::MyClass
しかし、動的にモジュール内にクラスを作成すると、名前空間にはなりません。
module MyModule
module SubModule
dynamic_name = "ClassName"
Object.const_set(dynamic_name, Class.new)
end
end
=> ClassName
MyModule::SubModule::ClassName
NameError: uninitialized constant MyModule::SubModule::ClassName
ClassName
=> ClassName
ダイナミックに作成されたクラスを名前空間にする方法はありますか?
'const_set'を実行するだけで、' Object.'の必要はありません –
さて、明示的に 'Object'に定数を設定するようにRubyに指示しますが、どうしましたか? Rubyに*まったく同じ*のどこかに定数を設定するよう明示的に*指示することができます。 –
ありがとうマックス!ジョルグ、そうだけど、この場合、マックスは頭に釘を打つ。私は現在のスコープでそれを設定する必要があります。 –