Почему во время миграции возникает ошибка в сочетании с данными по умолчанию? - PullRequest
0 голосов
/ 08 мая 2011
    rails g migration CreateStates

Затем добавьте следующий код в миграцию:

==========================

class CreateStates < ActiveRecord::Migration
  def self.up
    create_table :states do |t|
      t.column :name, :string
      t.column :abbreviation, :string
    end

    State.create :name => 'Alabama', :abbreviation => 'AL'
    State.create :name => 'Alaska', :abbreviation => 'AK'
    State.create :name => 'Arizona', :abbreviation => 'AZ'
  end

  def self.down
    drop_table :states
  end
end

==================================

Я получаю сообщение об ошибке:

** Invoke db: migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db: migrate
== CreateStates: migrating =========================================================
-- create_table (: states)
-> 0,0010 с
рейк отменен!
Произошла ошибка, эта и все последующие миграции отменены:

неинициализированная константа CreateStates :: State
/Пользователи / jondoe / .rvm / rubies / ruby-1.8.7-p330 / lib / ruby ​​/ gems / 1.8 / gems / rspec-core-2.5.1 / lib / rspec / core / backward_compatibility.rb: 20: в `const_missing'

========

Кажется, что это должно быть в состоянии сделать это:
http://api.rubyonrails.org/classes/ActiveRecord/Migration.html

Я также пытался создатьмодель вместо простого файла миграции.Все та же ошибка.Я также попытался создать 2 миграции (одну для создания таблицы, затем одну для добавления данных), и это тоже не сработало.Есть идеи?

Ответы [ 2 ]

0 голосов
/ 09 мая 2011

Ваш код будет работать отлично, за исключением того, что у вас на самом деле нет класса State.Единственный способ, которым Rails узнает об этом классе, это если вы определите его в app/models/state.rb как Class State < ActiveRecord::Base...

Вместо того, чтобы запускать пользовательскую миграцию, я бы порекомендовал запустить эту строку кода:

rails g model State name:string abbreviation:string

Это будет:

  1. Создать вашу модель (и файлы модульного тестирования)
  2. Создать миграцию с именем, например, 20110508223913_create_states.rb, которая будет выглядеть почти идентично вашей попытке миграциивыше.

Тогда все, что вам нужно сделать, это добавить свои State.create... строки, и вам будет хорошо идти.

0 голосов
/ 09 мая 2011

Попробуйте сделать:

State.reset_column_information

до создания State.create.

документация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...