Forum: Ruby on Rails Non-standard primary key column

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
Damian T. (Guest)
on 2007-01-18 13:21
(Received via mailing list)
Good day!
I've recently started to develop under rails.
I have a migration that should create a table, and I want the primary
key id to be not standard auto-incrementing integer but explicitly
given string.
I have language codes and language native names in the table so I don't
want either to keep that meaningless integer id in the db or to have it
appear in the uri.
The first question is, does this seriously compromise rails' magic?
Will scaffolding work?
The second question is, the migration doesn't work as I suppose it
It is

class CreateLanguages < ActiveRecord::Migration
   def self.up
     create_table :languages,  {:id=>false} do |t|
    t.column :id, :string, {:limit=>12}
    t.column :name, :string, {:limit=>60, :null=>false}
    t.primary_key :id

But what is created is like the last line is ignored

`id` varchar(12) default NULL,
  `name` varchar(60) NOT NULL

I'm using MySQL 5.0

Could you please clarify this behaviour and make a suggestion?

Your sincerely,
Damian/Three-eyed Fish
on 2007-01-18 13:59
(Received via mailing list)
Yes, this seriously compromises rails' magic. It expects an auto
incremented integer.

I'm not sure about the t.primary_key method, but this should work:

def self.up
  execute "ALTER TABLE languages ADD id string(12) DEFAULT NULL PRIMARY

A bit not-so-clean, though.
Damian T. (Guest)
on 2007-01-18 16:43
(Received via mailing list)
On Jan 18, 2007, at 14:58, removed_email_address@domain.invalid wrote:

> Yes, this seriously compromises rails' magic. It expects an auto
> incremented integer.

Thank you!
I hope I will change my thinking and implement my system in a more
railish way.

Your sincerely,
Damian/Three-eyed Fish
This topic is locked and can not be replied to.