2012-06-11 18 views
5

Anında bir Ruby sınıfı oluşturmam gerekiyor, yani ActiveRecord::Base'dan türetilen dinamik olarak. Zamanın varlık için eval kullanın:Değerlendirmeden anında Ruby Sınıfı Oluşturma

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

eval kullanmadan bunu yapmanın özlü yolu en azından eşit bir eşdeğer var mı ve? Tabii

cevap

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

Sen sınıfları örnekleri olmak üzere Class sınıfını kullanabilirsiniz :) yoktur. Şaşkın mı? ;)

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

cls.new 
+0

Bu, teşekkürler. Sınıfların da nesneler olduğunu biliyorum; ama temel bir argüman olarak ve özellikle de blok hakkında bir şeyler vermenin mümkün olmadığını bilemedim (tahmin edersem tahmin etmeliyim). – DrTom