Tests failing for models with string primary key

Hi,

My tests(rspec) are failing on models that has a String primary key. Rails wrongly creates the test table with the primary key in Integer format. As a result, the fixtures can not be imported, nor does relationships match up.

The database is imported and needs to match with an external database, so there is no possibly of changing the primary key to integer.

Does anyone know how to force Rails to recreate the test tables to respect string primary keys?

Another poster also experienced this problem, Tests failing on table with primary key as string - Rails - Ruby-Forum. But unfortunately he didn't get a reply.

Much thanks, Zac

Zac Zheng wrote:

Hi,

My tests(rspec) are failing on models that has a String primary key. Rails wrongly creates the test table with the primary key in Integer format. As a result, the fixtures can not be imported, nor does relationships match up.

The database is imported and needs to match with an external database, so there is no possibly of changing the primary key to integer.

Does anyone know how to force Rails to recreate the test tables to respect string primary keys?

This fix this turned out to be easy.

Schema.rb is run to create the test tables. I edited my copy to the following:

create_table "countries", :force => true, :id => false do |t|   t.column "locode"   # other columns end

# Manually assign 'locode' as primary key execute "ALTER TABLE `countries` ADD PRIMARY KEY (`locode`);"

Hey Presto! My specs that use countries are now running.

Thanks to Non integer primary key - Rails - Ruby-Forum

Zac