2010-09-23 8 views
0

Je ne suis pas en mesure de créer des colonnes de base de données lorsque j'utilise t.string ou t.number.Erreur de migration de base de données simple dans Rails

Quand je ne rake db: migrate i got ce

C:\Ruby\joker\chapter3>rake db:migrate 
(in C:/Ruby/joker/chapter3) 
== CreateComicBooks: migrating =============================================== 
-- create_table(:comic_books) 
    -> 0.0630s 
== CreateComicBooks: migrated (0.0640s) ====================================== 

J'ai utilisé le code suivant

class ComicBook < ActiveRecord::Base 
def self.up 
create_table :comic_books do |t| 
t.string :title 
t.string :writer 
t.string :artist 
t.integer :issue 
t.string :publisher 
t.timestamps 
end 
end 

def self.down 
    drop_table :comic_books 
    end 
end 

J'ai aussi essayé avec

class ComicBook < ActiveRecord::Base 
def self.up 
create_table :comic_books do |t| 
t.column "title", :string 
t.column "writer", :string 
t.column "artist", :string 
t.column "issue", :number 
t.column "publisher", :string 
t.timestamps 
end 
end 

def self.down 
# called when a migration is reversed 
    drop_table :comic_books 
    end 
end 

Dans la base de données que je suis obtenir la sortie suivante

mysql> show tables; 
+-----------------------------------+ 
| Tables_in_comic_books_development | 
+-----------------------------------+ 
| comic_books      | 
| schema_migrations     | 
+-----------------------------------+ 
2 rows in set (0.00 sec) 

mysql> describe comic_books; 
+------------+----------+------+-----+---------+----------------+ 
| Field  | Type  | Null | Key | Default | Extra   | 
+------------+----------+------+-----+---------+----------------+ 
| id   | int(11) | NO | PRI | NULL | auto_increment | 
| created_at | datetime | YES |  | NULL |    | 
| updated_at | datetime | YES |  | NULL |    | 
+------------+----------+------+-----+---------+----------------+ 
3 rows in set (0.01 sec) 

mysql> 

Maintenant, quand je suis en train de créer un nouveau disque que je reçois ce

C:\Ruby\joker\chapter3>ruby script/console 
Loading development environment (Rails 2.3.8) 
>> mycb = ComicBook.new 
=> #<ComicBook id: nil, created_at: nil, updated_at: nil> 
>> mycb.title = 'All new' 
NoMethodError: undefined method `title=' for #<ComicBook id: nil, created_at: ni 
l, updated_at: nil> 
     from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record 
/attribute_methods.rb:259:in `method_missing' 
     from (irb):2 

Je pense que d'une erreur très faible mais je ne peux pas juste chiffre dehors.

Dans l'attente de votre aide et de votre soutien.

Merci

+1

Vous mettez des migrations dans votre modèle. Ceci est une erreur. Reportez-vous à la réponse de tsdbrown pour résoudre votre problème. Quelqu'un vous l'a déjà dit dans votre autre question ... (http://stackoverflow.com/questions/3777645/error-while-creating-new-object-in-rails). – Mischa

Répondre

2

Qu'est-ce la ligne en haut de votre migration? Est-ce juste une erreur dans votre question?

ComicBook < ActiveRecord::Base 

On dirait que vous mettez le code dans le modèle plutôt que dans votre migration !?

Rechercher dans/db/migration dossier pour le fichier qui devrait avoir quelque chose comme ça en haut

class CreateComicBooks < ActiveRecord::Migration 

On dirait que vous avez utilisé un générateur pour créer la migration (ce qui est bien) puis exécutez un rake db: migrer et cela expliquera pourquoi vous avez la table dans la base de données avec juste l'id et les timestamps. Vous voulez probablement exécuter rake db: rollback, puis ajouter vos champs dans la partie def.auto de la migration et la re-migrer.

Questions connexes