2012-05-08 2 views
0
== AddAncestryToMessages: migrating ========================================== 
-- add_column(:messages, :ancestry, :string) 
rake aborted! 
An error has occurred, this and all later migrations canceled: 

SQLite3::SQLException: no such table: messages: ALTER TABLE "messages" ADD "ancestry" varchar(255) 

поэтому в моем приложении есть сообщения, которые вы можете публиковать (вроде как твиттер) и Im, добавляя ответы, и я использую драгоценный камень предка, чтобы сделать это.Почему я продолжаю получать эту ошибку, когда пытаюсь запустить rake db: migrate?

мой код в моем schema.rb файл (я думаю, что это файл использует для создания таблиц каждый раз, когда вы запускаете грабли БД:.! Мигрировать, но я мог бы быть неправильно (Это может быть проблемой)

create_table "messages", :force => true do |t| 
    t.string "content" 
    t.integer "user_id" 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
    t.string "ancestry" 
    end 

    add_index "messages", ["user_id", "created_at", "ancestry"], :name => "index_messages_on_user_id_and_created_at_and_ancestry" 

ответ

0

о, теперь я вижу: вы добавили свой код в schema.rb, но вы должны были использовать миграции Удалите вручную добавленный код из schema.rb и запуска:.

rails g migration CreateMessages 

вы получите файл дб/перенести/[временную метку ] _create_messages.rb. Заполните его change с вашим кодом, а затем запустите (он должен быть создан для вас, но пуст. Для старых версий он назван up):

rake db:migrate 

Эта команда изменит ваше schema.rb само по себе. Не меняйте его вручную! (пока вы не станете зрелым Rails-программистом).

+0

Хмм, что не работает для меня. Я достал «родословную» t.string и «родословную» из метода add_index, тем самым вернув ее в исходное состояние. затем я запустил rails g migration CreateMessages и создал для меня файл rb. Затем я скопировал и вставил весь мой код выше. Это все правильно? – BigBoy1337

+0

Подождите минуту. * Изменение его обратно в исходное состояние * - что вы имели в виду? У вас уже есть таблица и просто хотите добавить к ней индекс? Если вам нужно добавить индекс в таблицу, то ваш метод 'up' /' change' должен содержать ТОЛЬКО 'add_index ....'. Также, если у вас есть метод 'up', тогда заполните' down' методом 'remove_index,: name =>" ... "'. – jdoe

+0

@ пользователь1123905, почти правильный. В новом файле rb вы должны вызвать add_column и add_index, поскольку, как заметил jdoe, у вас уже есть таблица. –