2012-06-11 4 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

관련 문제