Ok, la domanda è vecchia e l'OP non ha specificato le versioni. Nessuna delle risposte qui riportati funzionato per me con queste versioni:
mysql2 0.3.11
rails 3.2.13
mysql 5.5
ho finito per andare per questo:
class SomeMigration < ActiveRecord::Migration
# emulate a primary_key column without auto-increment
# the solution here is to use a non-null integer id column with a unique index
# this is semantically different from PRIMARY KEY in mysql but not
# _too_ functionally different, the only difference is that mysql enforces
# no-more-than-one-primary-key but allows >1 unique index
def up
create_table :foobars, :id => false do |t|
t.integer :id, :null => false
t.string :name
end
add_index :foobars, :id, :unique => true
end
end
Spero che salva qualcuno là fuori dallo spendere tempo di monitoraggio questo in giù, o peggio ... usando la risposta senza verificare cosa fa al db ... perché il risultato dell'usare le risposte del soggiornante o del jim (con le mie versioni delle dipendenze) è che la migrazione funziona bene ma gli ID NULL sono consentiti e gli ID duplicati sono ammessi. Non ho provato la risposta di Shep perché non mi piace l'idea che db/schema.rb sia incoerente (+1 a Shep per essere esplicito riguardo a questa mancanza, a volte sarebbe una brutta cosa)
I'm non che il significato di questo, ma con questa soluzione, mysql describe
lo mostra come una chiave primaria, stessa di un tavolo con AR predefinito: id ... come in:
tabella con predefinito AR: id
+---------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
tabella con la mia soluzione:
+--------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
che è un po 'interessante perché l'SQL generato dalla migrazione con la mia soluzione non include "PRIMARY KEY" (ovviamente) ... ma con AR predefinito: id lo fa ... quindi sembra mysql, almeno per describe
tratta di una chiave non nullo unico-indicizzato come chiave primaria
HTH qualcuno
Questo non ha funzionato con l'adattatore mysql2 e Rails 3.2.13 –