Come forzare ActiveRecord a ricaricare una classe?
-
03-07-2019 - |
Domanda
Sto creando un gruppo di migrazioni, alcune delle quali sono standard "Crea tabella" o " modifica tabella " migrazioni e alcune delle quali modificano i dati. Sto usando i miei attuali modelli ActiveRecord per modificare i dati, alla:
Blog.all.each do |blog|
update_some_blog_attributes_to_match_new_schema
end
Il problema è che se carico la classe Blog, quindi modifico la tabella, quindi uso nuovamente la classe Blog, i modelli hanno le definizioni della tabella precedente e non possono salvare nella nuova tabella. C'è un modo per ricaricare le classi e le loro definizioni degli attributi in modo da poterle riutilizzare?
Soluzione
La risposta è sì!
Blog.reset_column_information
Altri suggerimenti
Ho sempre usato nuovi modelli nelle migrazioni
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
Ma Blog.reset_column_information
è più conveniente.
Crea nuove istanze:
Old_blogs = Blog.all
# cambia / modifica la tabella db qui
New_blogs = Blog.all # this should be reloaded or you could use the .reload on this
# cambia informazioni, carica vecchio in nuovo
es.
Old_blogs.each do |blog|
New_blogs.find(blog.id).title = blog.title
end