ruby on rails - form_with - ¿Cómo obligo a ActiveRecord a recargar una clase?
select rails helper (3)
Estoy creando un conjunto de migraciones, algunas de las cuales son migraciones estándar de "crear tabla" o "modificar tabla", y algunas de ellas modifican los datos. Estoy usando mis modelos actuales de ActiveRecord para modificar los datos, a la la:
Blog.all.each do |blog|
update_some_blog_attributes_to_match_new_schema
end
El problema es que si cargo la clase Blog, modifico la tabla y vuelvo a utilizar la clase Blog, los modelos tienen las definiciones de la tabla anterior y no pueden guardarse en la nueva tabla. ¿Hay alguna manera de volver a cargar las clases y sus definiciones de atributos para poder reutilizarlas?
¡La respuesta es sí!
Blog.reset_column_information
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 la información, cargar viejos a nuevos
ex.
Old_blogs.each do |blog|
New_blogs.find(blog.id).title = blog.title
end
Siempre utilicé nuevos modelos 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.