[Rails] Re: Automatic discovery of table names

Florian Groß florgro at gmail.com
Tue Jan 25 21:42:28 GMT 2005


Jeremy Kemper wrote:

> Adelle Hartley wrote:
>>ActiveRecord::Base.connection.get_table_names.each { |table|
>>MagicallyCreateClass table }
>>Is this possible?
> 
> Sure:
>   connection.table_names.each do |table_name|
>     class_name = table_name.camelize
>     unless Object.const_defined?(class_name)
>       eval "class #{class_name} < ActiveRecord::Base; end"
>     end
>   end

While this works it's a bit nasty and can be a little confusing when 
somebody uses an invalid class name. I tend to avoid eval() when I can 
and use some of the higher level ways of doing meta stuff. In this case 
you could also do the following:

connection.table_names.each do |table_name|
   class_name = table_name.camelize
   unless Object.const_defined?(class_name)
     Object.const_set(class_name, Class.new(ActiveRecord::Base) do
       one_to_one_relations.each do |name|
         has_one name.intern
       end

       def foo() end
       # and so on
     end)
   end
end



More information about the Rails mailing list