2012-06-11 13 views
5

मुझे फ्लाई पर रूबी क्लास बनाने की ज़रूरत है, यानी गतिशील रूप से, यह ActiveRecord::Base से निकला है। मैं समय से किया जा रहा के लिए eval का उपयोग करें:बिना फ्लाई पर रूबी क्लास बनाना

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

संबंधित मुद्दे