Getting types of the attributes in an ActiveRecord object

Posted by Michael Neale on Stack Overflow See other posts from Stack Overflow or by Michael Neale
Published on 2010-03-08T05:57:25Z Indexed on 2010/03/08 6:06 UTC
Read the original article Hit count: 708

I would like to know if it is possible to get the types (as known by AR - eg in the migration script and database) programmatically (I know the data exists in there somewhere).

For example, I can deal with all the attribute names:

ar.attribute_names.each { |name| puts name }

.attributes just returns a mapping of the names to their current values (eg no type info if the field isn't set).

Some places I have seen it with the type information:

in script/console, type the name of an AR entity:

>> Driver
=> Driver(id: integer, name: string, created_at: datetime, updated_at: datetime)

So clearly it knows the types. Also, there is .column_for_attribute, which takes an attr name and returns a column object - which has the type buried in the underlying database column object, but it doesn't appear to be a clean way to get it.

I would also be interested in if there is a way that is friendly for the new "ActiveModel" that is coming (rails3) and is decoupled from database specifics (but perhaps type info will not be part of it, I can't seem to find out if it is).

Thanks.

© Stack Overflow or respective owner

Related posts about ruby

Related posts about ruby-on-rails