Ошибка простой миграции базы данных в Rails - PullRequest
0 голосов
/ 23 сентября 2010

Я не могу создать столбцы базы данных, когда я использую t.string или t.number.

Когда я сделал рейк db: перенести, я получил это

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

Я использовалследующий код

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

Я также пытался с

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

В базе данных я получаю следующий вывод

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>

Теперь, когда я пытаюсь создатья получаю новую запись

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

Я думаю, что это очень маленькая ошибка, но я просто не могу ее понять.

Ждем вашей помощи и поддержки.

Спасибо

1 Ответ

2 голосов
/ 23 сентября 2010

Что это за строка в верхней части вашей миграции?Это просто ошибка в вашем вопросе?

ComicBook < ActiveRecord::Base

Похоже, вы поместили код в модель, а не в миграцию!?

Найдите в папке / db / migrate файл, который должен иметь что-то подобноеtop

class CreateComicBooks < ActiveRecord::Migration

Похоже, что вы использовали генератор для создания миграции (что нормально), а затем запустили rake db: migrate, и это объяснит, почему у вас есть таблица в базе данных с толькоID и метки времени.Возможно, вы захотите запустить rake db: rollback, затем добавьте свои поля в часть def self.up в процессе миграции и повторите миграцию.

...