Pergunta

Estou criando um bando de migrações, alguns dos quais são standard "criar a tabela" ou "modificar a tabela" migrações, e alguns dos quais dados modificar. Eu estou usando meus modelos ActiveRecord reais para modificar os dados, a la:

Blog.all.each do |blog|
  update_some_blog_attributes_to_match_new_schema
end

O problema é que se eu carregar a classe Blog, em seguida, modificar a tabela, em seguida, usar a classe Blog novamente, os modelos têm as definições da tabela de idade, e não pode salvar para a nova tabela. Existe uma maneira de recarregar as classes e as suas definições de atributos para que eu possa reutilizá-los?

Foi útil?

Solução

A resposta é sim!

Blog.reset_column_information

Outras dicas

Eu sempre usado novos modelos em migrações

    MyBlog < ActiveRecord::Base
      set_table_name 'blogs'
    end

    def self.up
      MyBlog.all.each do |blog|
        update_some_blog_attributes_to_match_new_schema
      end
    end

Mas Blog.reset_column_information é mais conveniente.

Criar novas instâncias:


Old_blogs = Blog.all

# alterar / modificar db mesa aqui

New_blogs = Blog.all # this should be reloaded or you could use the .reload on this

# informações de alteração, carregue velho em novo

ex.

Old_blogs.each do |blog|
  New_blogs.find(blog.id).title = blog.title
end
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top