Carregando dados em uma migração Rails

votos
1

Eu criei número de migrações começando com uma definição para uma tabela de mensagens.

class CreatePosts < ActiveRecord::Migration
  def self.up
    create_table :posts do |t|
      t.column title, :string, :limit => 100, :default => ,  :null => false
      t.column content, :text, :null => false
      t.column author, :string, :limit => 100, :default => 0,  :null => false
      t.column category, :string, :limit => 20, :default => ,  :null => false
      t.column status, :string, :limit => 20, :default => ,  :null => false
      t.timestamps
    end
  end

  def self.down
    drop_table :posts
  end
end

E outra para uma tabela de usuários em que eu carregar alguns dados para um usuário padrão após a criação da tabela.

class CreateUsers < ActiveRecord::Migration
  def self.up
    create_table :users do |t|
      t.column username, :string,     :limit => 25, :default => ,   :null => false
      t.column hashed_password, :string,  :limit => 40, :default => , :null => false
      t.column first_name, :string,   :limit => 25, :default => ,   :null => false
      t.column last_name, :string,    :limit => 40, :default => ,   :null => false
      t.column email, :string,        :limit => 50, :default => ,   :null => false
      t.column display_name, :string, :limit => 25, :default => ,   :null => false
      t.column user_level, :integer,  :limit => 3,  :default => 0,   :null => false
      t.timestamps
    end
    user = User.create(:username => 'bopeep',
      :hashed_password => 'bopeep',
      :first_name => 'Bo',
      :last_name => 'Peep',
      :email => 'bo@peep.com',
      :display_name => 'Little Bo Peep',
      :user_level => 9)
  end

  def self.down
    drop_table :users
  end
end

Seguinte eu criei uma migração para alterar a tabela de postagens para renomear a tabela para blog_posts. Aqui eu também queria carregar uma entrada de blog padrão.

class AlterPosts < ActiveRecord::Migration
  def self.up
    rename_table :posts, :blog_posts
    change_column :blog_posts, :author, :integer, :default => 0, :null => false
    rename_column :blog_posts, :author, :author_id
    add_index :blog_posts, :author_id
    bopeep = User.find_by_username 'bopeep'
    BlogPost.create(:title => 'test', :content => 'test', :author_id => bopeep.id, :category => 'test', :status => 'ok')
  end

  def self.down
    remove_index :blog_posts, :author_id
    rename_table :blog_posts, :posts
    rename_column :posts, :author_id, :author
    change_column :posts, :author, :string, :limit => 100, :default => 0, :null => false
  end
end

Mas isso gera um erro:

uninitialized constant AlterPosts::BlogPost

Como eu deveria ter carregado o BlogPost padrão em vez de BlogPost.create?

Publicado 19/05/2009 em 17:57
fonte usuário
Em outras línguas...                            


1 respostas

votos
5

Separe seu rename_table e sua mudança / renomear migrações coluna em outro arquivo de migração.

Eu não acho que a renomeação é comprometido até depois que o bloco inteiro passa por ... e assim, portanto, blog_posts ainda não existe.

Respondeu 19/05/2009 em 18:00
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more