2013-10-11 31 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