Pregunta

Estoy creando un montón de migraciones, algunas de las cuales son estándar " crear tabla " o " modificar tabla " Migraciones, y algunas de las cuales modifican datos. Estoy usando mis modelos reales de ActiveRecord para modificar los datos, a la:

Blog.all.each do |blog|
  update_some_blog_attributes_to_match_new_schema
end

El problema es que si cargo la clase Blog, luego modifico la tabla, luego uso la clase Blog nuevamente, los modelos tienen las definiciones de la tabla anterior y no pueden guardar en la tabla nueva. ¿Hay alguna forma de volver a cargar las clases y sus definiciones de atributos para que pueda volver a usarlas?

¿Fue útil?

Solución

¡La respuesta es sí!

Blog.reset_column_information

Otros consejos

Siempre usé modelos nuevos en migraciones

    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

Pero Blog.reset_column_information es más conveniente.

Crear nuevas instancias:


Old_blogs = Blog.all
  

# cambiar / modificar la tabla db aquí

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

# cambiar información, cargar lo antiguo en lo nuevo

ej.

Old_blogs.each do |blog|
  New_blogs.find(blog.id).title = blog.title
end
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top