Using static name as unique key instead of id in some table


I am not sure if this is best practice or not. or it is a stupid

Using static name as unique key instead of id in some table.
What I mean by static name is the unique name from the actual field name
For example : "San francisco" become "san_francisco" (it automatically
replace space or others not character to "_")

Reason to use this way
1. User friendly url
  so someone can type

Cons of not using it
1. need to customize route.rb to use static name
2. others table that reference this
3. performance in database indexing
4. slower database query
5. Others table start to use "static_name" instead of id to reference to
this table

Thank you in advance, any feedback are welcome

I believe you can have the besto of both worlds:

In the City model (as u said san francisco):

validate_uniqueness_of :name

in the routes

map.connect '/:city_name', :controller => 'cities', :action => 'show'

in the controller

def show
   @city = City.find_by_name(params[:city_name])

you can have id as all other tables (not having it just seems too bad
you can have pretty urls


There's an even easier way. Use the friendly identifier plugin:

With a single line of code in your model:

friendly_identifier :name, :identifier_column => :name

you get the pretty URLs you want without breaking the Rails default
behavior with id's.

Beta Beta wrote:

Excellent tips, thanks Wolas and Brent Miller