2012-06-11 77 views
5

我需要即時創建一個Ruby類,即動態地創建一個來自ActiveRecord::Base的Ruby類。我用eval暫且:在沒有eval的情況下即時創建一個Ruby類

eval %Q{ 
    class ::#{klass} < ActiveRecord::Base 
    self.table_name = "#{table_name}" 
    end 
} 

有等價物,且至少同樣簡潔的方式來做到這一點,而無需使用eval

回答

4

當然,還有:)

class Foo 
    class << self 
    attr_accessor :table_name 
    end 
end 

Bar = Class.new(Foo) do 
    self.table_name = 'bars' 
end 

Bar.table_name # => "bars" 
14

可以使用Class類,它的類的實例。困惑了嗎? ;)

cls = Class.new(ActiveRecord::Base) do 
    self.table_name = table_name 
end 

cls.new 
+0

這就是它,謝謝。我知道類也是對象;但我不知道有可能把基地級別作爲一個論點,特別是關於這個區塊(事後看來,我應該猜到了)。 – DrTom

相關問題