rails form_with form_for form for ruby-on-rails ruby activerecord migration

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.