2013-10-11 32 views
2

我想能够动态地创建类,用于在Rails应用程序之外的脚本,从ActiveRecord继承。动态创建一个从ActiveRecord继承的类?

我卡上是这样的:

require 'active_record' 

def create_arec(table_name) 
    Class.new ActiveRecord::Base do 
    self.table_name = table_name 
    yield 
    end 
end 

Band = create_arec 'bands' do 
    scope :only_rock, -> {where genre: 'rock'} 
end 

rock_bands = Band.only_rock #undefined method `only_rock' 

如何使它工作,或可有人告诉我更好的方式来做到这一点?

+2

伙计!真的?为什么?而如果!只需使用'class_eval'。如果他们必须维护这个,你将会被某个人杀死!我告诉你,不是在开玩笑! – phoet

+0

也许我更好奇,如果你可以在块内产生Class.new块然后打算实际使用..无论如何,是的谢谢,class_eval会好得多。我爱红宝石。 –

+0

为您的问题写一个答案并标记为已解决,以便人们不必再查看此问题。 – phoet

回答

2

钉它:

def create_arec(table_name, &block) 
    klass = Class.new(ActiveRecord::Base){self.table_name = table_name} 
    klass.class_eval &block 
    klass 
end 

感谢@phoet