Bien, la pregunta es antigua y el OP no especificó las versiones. Ninguna de las respuestas dadas aquí trabajó para mí con estas versiones:
mysql2 0.3.11
rails 3.2.13
mysql 5.5
Terminé yendo para esto:
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
espero que salva a alguien por ahí de gastar tiempo buscando esto abajo, o peor ... usando la respuesta sin verificar lo que hace al DB ... porque el resultado de usar las respuestas de sojourner o jim (con mis versiones de las dependencias) es que la migración funciona bien, pero se permiten identificadores NULL y los ID duplicados están permitidos. No intenté la respuesta de Shep porque no me gusta la idea de que db/schema.rb sea inconsistente (+1 a Shep por ser explícito acerca de ese inconveniente, a veces sería una cosa mala)
Estoy no está seguro de la importancia de esto, pero con esta solución, MySQL describe
lo muestra como una clave principal, al igual que una mesa de AR con defecto: id ... como en:
mesa con AR por defecto: Identificación del
+---------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
tabla con mi solución:
+--------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
que es un poco interesante porque el SQL generado por la migración con mi solución no incluye "PRIMARY KEY" (por supuesto) ... pero con AR predeterminado: id lo hace ... así que parece mysql, al menos para describe
trata de una clave única indexada no nulo como clave principal
HTH alguien
Esto no funcionó para mí con el adaptador mysql2 y Rails 3.2.13 –