Okay, die Frage ist alt und das OP hat keine Versionen angegeben. Keine der gegebenen Antworten hier war für mich mit diesen Versionen:
mysql2 0.3.11
rails 3.2.13
mysql 5.5
ich für diese gehen endete:
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
Ich hoffe, dass jemand spart dort von Zeit zu verbringen diese aufzuspüren, oder noch schlimmer ... mit der Antwort ohne zu überprüfen, was es mit der db tut ... weil das Ergebnis der Verwendung von entweder Sojourners oder Jims Antworten (mit meinen Versionen der Abhängigkeiten) ist, dass die Migration gut läuft, aber NULL-IDs erlaubt sind, und doppelte IDs sind erlaubt. Ich habe die Antwort von Shep nicht versucht, weil ich die Idee von db/schema.rb nicht mag, die inkonsistent ist (+1 zu Shep, um über diesen Mangel ausdrücklich zu sein, manchmal würde das ein Schlechtes Ding sein)
Ich bin nicht sicher, ob diese von der Bedeutung, aber mit dieser Lösung, mysql describe
zeigt es als Primärschlüssel, gleich wie eine AR-Tabelle mit Standard: id ... wie in:
Tabelle mit AR Standard: id
+---------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
Tabelle mit meiner Lösung:
+--------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
das ist irgendwie interessant, weil das SQL, das durch die Migration mit meiner Lösung erzeugt wird, "PRIMARY KEY" (natürlich) nicht einschließt ... aber mit AR Standard: id tut es ... so scheint es zumindest mysql für describe
behandelt ein nicht-null-unique-indizierte Schlüssel als Primärschlüssel
HTH jemand
Dies funktionierte nicht für mich mit mysql2 Adapter und Rails 3.2.13 –