--- oracle_adapter.rb.orig 2008-05-23 10:13:48.000000000 -0700 +++ oracle_adapter.rb 2008-05-23 10:18:29.000000000 -0700 @@ -65,8 +65,22 @@ private def simplified_type(field_type) return :boolean if OracleAdapter.emulate_booleans && field_type == 'NUMBER(1)' - case field_type - when /date|time/i then :datetime + # Finer-granularity of number type handling. + return :float if field_type == 'NUMBER' + return :decimal if field_type =~ /^NUMBER\(\d+,\d+\)$/ + case self.name + # Treat columns which end with 'date' as ruby date columns + when /date$/i then :date + # Removed 'date' from regex to more properly map to datetime + when /time/i then :datetime + # Also return the same for updated_at and created_at + when /^(?:updated_at|created_at)$/i then :datetime + # Treat id columns (primary key) as integer. Needed for Views. + when /^id$/i then :integer + # Do not do anything with session_id column (defined in sessions table as string) + when /^session_id$/i then super + # Treat other _id columns (foreign key) as integer. Needed for Views. + when /_id$/i then :integer else super end end