# Camelize database calls

**URL:** <https://www.ruby-forum.com/t/camelize-database-calls/123629>\
**Category:** Rails\
**Created:** [December 19, 2007, 10:47am UTC](https://www.ruby-forum.com/t/camelize-database-calls/123629 "2007-12-19T10:47:42Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![ianic](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/65b543/32.png) [@ianic](https://www.ruby-forum.com/u/ianic)\
**Post date:** [December 19, 2007, 10:47am UTC](https://www.ruby-forum.com/t/camelize-database-calls/123629/1 "2007-12-19T10:47:42Z")

</div>

I have legacy Sql Server database and Rails applications. Column names  
in database are all in PascalCase (FirstName, CustomerId…).

I’m searching for an easy way to use underscore\_casing in Ruby and  
PascalCasing in database. I would like to write first\_name in Rails  
for FirstName column in database.

Just like translating Ruby in rjs templates to JavaScript cameCase  
convention.

The best I found so far is a start of writing plugin:  
[http://code.google.com/p/rails-mssql-tools/](http://code.google.com/p/rails-mssql-tools/)

Any advice would be great.  
Thanks,  
Igor.

---

<div class="post-metadata">

**Author:** ![ianic](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/65b543/32.png) [@ianic](https://www.ruby-forum.com/u/ianic)\
**Post date:** [December 19, 2007, 11:15am UTC](https://www.ruby-forum.com/t/camelize-database-calls/123629/2 "2007-12-19T11:15:21Z")

</div>

Check methods like…

```
 human_name()
 tableize()
 underscore()
 humanize()
 pluralize()
 singularize()
```

---

<div class="post-metadata">

**Author:** ![ianic](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/65b543/32.png) [@ianic](https://www.ruby-forum.com/u/ianic)\
**Post date:** [December 19, 2007, 11:17am UTC](https://www.ruby-forum.com/t/camelize-database-calls/123629/3 "2007-12-19T11:17:06Z")

</div>

Check that  
underscore() method… I think u are saying about this

---

<div class="post-metadata">

**Author:** ![ianic](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/65b543/32.png) [@ianic](https://www.ruby-forum.com/u/ianic)\
**Post date:** [December 19, 2007, 4:50pm UTC](https://www.ruby-forum.com/t/camelize-database-calls/123629/4 "2007-12-19T16:50:22Z")

</div>

camelize and underscore will convert a string to required casing

but I’m looking for something more general like:  
ActiveRecord::Base.camelize\_table\_column\_names = true  
🙂

like existing  
ActiveRecord::Base.pluralize\_table\_names

---

<div class="post-metadata">

**Author:** ![ianic](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/65b543/32.png) [@ianic](https://www.ruby-forum.com/u/ianic)\
**Post date:** [December 20, 2007, 12:51am UTC](https://www.ruby-forum.com/t/camelize-database-calls/123629/5 "2007-12-20T00:51:18Z")

</div>

def ChangeTheBloodyColumnNames \< ActiveRecord::Base  
def self.up  
rename\_column :table, :FirstName, :first\_name  
…  
end

def self.down  
raise IrreversibleMigration, “No can do sir!”  
end  
end

On Dec 20, 2007 4:18 AM, Nathan E.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> ```
> method_name = value
> 
> ```
> 
> >

–  
Ryan B.

> **[frozenplague.net](http://www.frozenplague.net)**
>
> This domain may be for sale!

---

<div class="post-metadata">

**Author:** ![ianic](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/65b543/32.png) [@ianic](https://www.ruby-forum.com/u/ianic)\
**Post date:** [December 19, 2007, 6:48pm UTC](https://www.ruby-forum.com/t/camelize-database-calls/123629/6 "2007-12-19T18:48:12Z")

</div>

There is nothing that specific and generic but you can iterate through  
all the attributes using meta and then do something to this effect

self.attributes.each do |method\_name|  
define\_method(method\_name.underscore)  
method\_name  
end

define\_method(method\_name.underscore + “=”, value)  
method\_name = value  
end  
end

This is very much pseudocode but I assure you this is possible and not  
too hard to do.

Check methods like “define\_method” out for more information. Even better  
look at “alias\_attribute”

---

<div class="post-metadata">

**Author:** ![ianic](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/65b543/32.png) [@ianic](https://www.ruby-forum.com/u/ianic)\
**Post date:** [December 20, 2007, 12:51am UTC](https://www.ruby-forum.com/t/camelize-database-calls/123629/7 "2007-12-20T00:51:18Z")

</div>

Whoops, the def Change… should be class Change.

On Dec 20, 2007 10:20 AM, Ryan B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > self.attributes.each do |method\_name|  
> > too hard to do.  
> > –  
> > Ryan B.  
> > [http://www.frozenplague.net](http://www.frozenplague.net)

–  
Ryan B.

> **[frozenplague.net](http://www.frozenplague.net)**
>
> This domain may be for sale!
