Я довольно новичок в Ruby on Rails.
У меня есть 2 файла миграции, которые были предоставлены. Первый, с префиксом 001, создает таблицу и несколько столбцов для этой таблицы. Следующий файл переноса с префиксом 002 вставляет строки в таблицу, созданную в файле 001.
Запуск миграции (rake db: migrate в командной строке) правильно создает таблицу, но не вставляет какие-либо данные, которые являются проблемой. Код из вставки выглядит следующим образом (за исключением гораздо большего количества операторов Student.create,
class AddStudentData < ActiveRecord::Migration
def self.up
...
Student.create(:name => "Yhi, Manfredo", :gender => "M")
...
end
def self.down
Student.delete_all
end
end
Насколько я понимаю, ученик - это объект модели, поэтому моя модель ученика выглядит так:
class Student < ActiveRecord::Base
end
Нужно ли явно определять метод создания в Student или это что-то, что дано? (Этот проект был выполнен с использованием эшафот)
Спасибо.
Редактировать 1: Я использовал предложение Дэмиена и позвонил create!
вместо create
, но получил тот же ответ. Тогда то, что я сделал, чтобы увидеть, достиг ли этот код этого уровня, было так называемо,
Student.create12312313!(:name => "foo", :gender => "M")
, который, очевидно, является недействительным кодом, и миграция не выдает никакой ошибки.
Edit2: Ответ найден. Версия таблицы schema_migrations была установлена на 3, и у меня было только 3 различных файла миграции, поэтому она никогда не запускала ни один из файлов миграции, которые у меня были. Вот почему ничего не обновлялось, а поддельные создания, которые я использовал, никогда не выдавали ошибок. Причина, по которой данные об учениках не были вставлены в первый раз, заключалась в том, что определенная таблица уже была в базе данных, и это вызвало конфликт при первом переносе. Так что я действительно искал не db:migrate
, а db:reset
Несколько хорошо проведенных часов.