> Essentially, David, this is a *problem* with ActiveRecord.
> ActiveRecord is in the wrong here if it's being case-sensitive to
> the database's meta-data in the general case.

Active Record places a number of naming constraints of your database. 
Just treat the forced lower-case as one such. In the databases where Id 
is the same as ID and credit_ratings as CREDIT_RATINGS, it should then 
be no problem to rename the fields. For cases where it is significant, 
like the database I choose to use for all my projects, it's nice just 
to be consistent and not have code to massage cases.

Remember, Active Record is first and foremost an ORM mapper for new 
applications. There are some options to tweak the mapping, but they're 
really only there for grace and flute playing. Active Record is 
basically unashamed to strongly suggest (or even mandate) a naming 
convention that'll lead to less software for me to write and maintain. 
And less configuration for you to contemplate.

> ...but the reality is that ActiveRecord is in the wrong for 
> case-sensitivity on the database side.

I don't think reality have too much to do with our opinions here ;). I 
fully recognize that other choices could have been made for the naming 
conventions in Active Record -- given another designer. I don't 
recognize my choices to be "wrong" by them being different that yours 
would have been.

But I'm glad you're passionate enough about Active Record to construct 
a reality around how you think it should be designed. I think a lot of 
good design decisions can be made when such a reality is picked and 
held dear. But when giving recommendations on a piece of software one 
didn't write, it's usually prudent to examine the other guys reality 
before constructing your own :)

Active Record is a MySQL-driven ORM mapper. It now has adapters for 
PostgreSQL, SQLite, and latest SQL Server, but they all derive from the 
principles of the original MySQL driver. So in the eyes of Active 
Record, databases that deviate from the MySQL-way are the ones that are 
"wrong" and special programming is needed in their adapters to emulate 
MySQL behavior. That's the reality picked :)

> Sorry, but I lived and breathed real RDBMS systems for a few years,
> and MySQL is wrong (and inconsistent! -- it depends on the
> underlying filesystem, not on the inherent nature of the database).
> If ActiveRecord's behaviour is based on that, then ActiveRecord
> needs to change.

Jamis Buck had an example from Oracle also being case sensitive, so it 
seems to be somewhat more widespread than just MySQL. And as I said, 
Active Record was founded on MySQL, so when behavior differs between 
RDBMS, AR will side by MySQL by default (strong pressures might revert 
that default, but I don't think this is a strong pressure).

Thanks for sharing your opinions, though, Austin.
--
David Heinemeier Hansson,
http://www.basecamphq.com/   -- Web-based Project Management
http://www.rubyonrails.org/  -- Web-application framework for Ruby
http://macromates.com/       -- TextMate: Code and markup editor (OS X)
http://www.loudthinking.com/ -- Broadcasting Brain