web-dev-qa-db-fra.com

Mysql2 :: Error: Toutes les parties d’une clé primaire doivent être NOT NULL; si vous avez besoin de NULL dans une clé, utilisez plutôt UNIQUE

J'ai créé une application de démonstration dans Rails 3.2.9 et Ruby versiion 2.0.0. Après avoir échafaudé le modèle de blog, j'essaie de le migrer, mais le problème suivant.

# rake db: migrate

== CreateBlogs: migration =========================================== =======

- create_table (: blogs) rake avorté!

StandardError: une erreur s'est produite, toutes les migrations ultérieures ont été annulées:

Mysql2 :: Error: Toutes les parties d’une clé primaire doivent être NOT NULL; si vous avez besoin de NULL dans une clé, utilisez plutôt UNIQUE: CREATE TABLE blogs (id int (11) DEFAULT NULL auto_increment PRIMARY KEY, title varchar (255), description text, created_at datetime NON, NULL__, updated_at unique /usr/local/rvm/gems/Ruby-2.0.0-p648@demo-app/gems/activerecord-3.2.9/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in query' /usr/local/rvm/gems/Ruby-2.0.0-p648@demo-app/gems/activerecord-3.2.9/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:inblock in execute ' /usr/local/rvm/gems/Ruby-2.0.0-p648@demo-app/gems/activerecord-

....

....

....

-3.2.9/lib/active_record/migration.rb: 551: dans migrate' /usr/local/rvm/gems/Ruby-2.0.0-p648@demo-app/gems/activerecord-3.2.9/lib/active_record/railties/databases.rake:179:inblock (2 niveaux) dans ' /usr/local/rvm/gems/Ruby-2.0.0-p648@demo-app/gems/rake-11.3.0/exe/rake:27:in `' Tâches: TOP => db: migrate (Voir la trace complète en exécutant la tâche avec --trace)

8
Kishan Ku. Patel

config/initializers/abstract_mysql2_adapter.rb

require 'active_record/connection_adapters/mysql2_adapter'

class ActiveRecord::ConnectionAdapters::Mysql2Adapter
  NATIVE_DATABASE_TYPES[:primary_key] = "int(11) auto_increment PRIMARY KEY"
end
32
Swapnil Patil

Dans cette ligne id int(11) DEFAULT NULL auto_increment PRIMARY KEY, vous créez une clé primaire (qui ne peut jamais être nulle), avec la valeur par défaut NULL. Dans votre fichier de migration (ou schema.rb), vous devez vous assurer que la partie DEFAULT NULL est supprimée.

0
Mizzcoollizz