我正在爲一個RESTful API創建一個gem,並且我注意到,由於它是一個REST api,很多資源url都是一樣的,因此每個類的幾個方法會完全相同(只是uri路徑不同)。如何動態創建也在命名空間中的子類?
我開始喜歡這個創建類:
module NameSpace
Class1 < SuperClass; ... end
end
在各種文件
,將類似:
moduel NameSpace
Class2 < SuperClass; ... end
end
所以,這裏是我到目前爲止已經開發出:
RESOURCE_NAMES = [
"Class1",
"Class2",
...
]
module NameSpace
RESOURCE_NAMES.each {|class_name|
Object.const_set(
class_name,
Class.new(SuperClass) do
CONTROLLER = class_name.downcase
@attributes = {}
# class variables
def self.show(id); ... end
def self.update(id); ... end
def self.destroy(id); ... end
end
)
}
end
但是,當我嘗試運行控制檯,並要求我的寶石,我得到這個輸出:
require "rubygems"
require "mygem"
/home/me/.rvm/gems/ruby-1.8.7-p371/gems/mygem-0.0.1/lib/mygem/restful_resource.rb:17: warning: already initialized constant CONTROLLER
/home/me/.rvm/gems/ruby-1.8.7-p371/gems/mygem-0.0.1/lib/mygem/restful_resource.rb:17: warning: already initialized constant CONTROLLER
/home/me/.rvm/gems/ruby-1.8.7-p371/gems/mygem-0.0.1/lib/mygem/restful_resource.rb:17: warning: already initialized constant CONTROLLER
/home/me/.rvm/gems/ruby-1.8.7-p371/gems/mygem-0.0.1/lib/mygem/restful_resource.rb:17: warning: already initialized constant CONTROLLER
/home/me/.rvm/gems/ruby-1.8.7-p371/gems/mygem-0.0.1/lib/mygem/restful_resource.rb:17: warning: already initialized constant CONTROLLER
,當我嘗試做 > NameSpace::Cass1
,我得到
NameError: uninitialized constant NameSpace::Class1
我的問題是:我是關閉?我如何正確定義動態子類和命名空間類?
不知道我可以使用const_set那樣..但我想這是有道理的,因爲我設置了一個...常量。 – NullVoxPopuli