我的基类是Premade
,它有两个子类:PremadeController
和PremadeControllerSession
。他们非常相似。例如。他们都需要在MySQl中分批创建1000条记录,但我希望PremadeControllers
能够在之前建成,因此我让他们在Resque中进入不同的队列。在Ruby中动态访问类模块
所以两个子类是这样的:
class PremadeController < Premade
def self.maintain
((max_premade_count - premade_count)/batch_size).times do
Resque.enqueue(Workers::BuildPremadeControllerJob)
end
end
end
和:
class PremadeSessionController < Premade
def self.maintain
((max_premade_count - premade_count)/batch_size).times do
Resque.enqueue(Workers::BuildPremadeControllerSessionJob)
end
end
end
这些方法之间的唯一区别就是工人阶级(即BuildPremadeControllerSessionJob
和BuildPremadeControllerJob
)
我试图把它放在父类中并动态地定义这个常量,但是这可能是由于范围问题导致的。例如:
class Premade
def self.maintain
((max_premade_count - premade_count)/batch_size).times do
Resque.enqueue(Workers::)
end
end
end
我想要做的就是在父定义此方法,如:
def self.maintain
((max_premade_count - premade_count)/batch_size).times do
Resque.enqueue(Workers::build_job_class)
end
end
凡build_job_class
在每个子类中定义。
请不要告诉我改变Resque的工作者语法,因为这不是我问的问题。
这个应用程序是在1.8.7。看起来只有1.9.3。那是对的吗? – s84
'const_get' [可在1.8.7上使用](http://ruby-doc.org/core-1.8.7/Module.html#method-i-const_get) – x1a4
好,很好。将有一个尝试。 – s84