Friday, March 25, 2011

Data

This whole project started out as a better way to visualize data, and as such I have a few data sources to ingrate. One of them is a CSV file with data in it. I've been working on an import function to add CSV-formatted information into my Rails application, based off the blog entry by Roy Ratcliffe at Pioneering Software in the UK.


His example was written last July, and uses Rails 3.0.0 beta 4. An updated version was completed by Jacob Poulsgaard Tjoernholm, and works in Rails 3.0.3; it even works after a bump to 3.0.5. The problem is that it doesn't work in my project. Why? Because the rails method class_name was removed from the release candidate of Rails 3. The method class_name translates a table name into a class name. This can also be accomplished with the .singularize.camelize.constantize string of methods. .

class_name was used in two separate spots, in the import tables controller, and in the show page of import_tables. In the import tables controller, I used ActiveRecord::Base.connection.tables.select { |t| t == merge_table } to return tables that match merge_table, then .first to select the only element in the resulting array. Finally I used .singularize.camelize.constantize again to turn it into a class name.

The second place to avoid using class_name is in the import_tables/show view. There you can change ActiveRecord::Base.const_get(ActiveRecord::Base.class_name(table)).columns into table.singularize.camelize.constantize.columns. Again it takes the table name and changes it into a class name, using some rails inflectors.

No comments:

Post a Comment