2012-06-11 17 views
5

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

関連する問題