Wie kann ich Active zwingen, eine Klasse zu laden?
-
03-07-2019 - |
Frage
Ich erstelle eine Reihe von Migrationen, von denen einige Standards sind „create table“ oder „ändern Tabelle“ Migrationen, und von denen einige Daten ändern. Ich bin mit meinen aktuellen Active Modellen, um die Daten zu ändern, a la:
Blog.all.each do |blog|
update_some_blog_attributes_to_match_new_schema
end
Das Problem ist, dass wenn ich die Blog-Klasse zu laden, dann die Tabelle ändern, dann wieder die Blog-Klasse verwenden, haben die Modelle der alten Tabellendefinitionen und kann nicht in die neue Tabelle speichern. Gibt es eine Möglichkeit, die Klassen und ihre Attributdefinitionen neu zu laden, damit ich sie wiederverwenden kann?
Lösung
Die Antwort ist ja!
Blog.reset_column_information
Andere Tipps
ich immer wieder neue Modelle in Migrationen verwendet
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
Aber Blog.reset_column_information
ist bequemer.
Erstellen Sie neue Instanzen:
Old_blogs = Blog.all
# Änderung / db-Tabelle ändert hier
New_blogs = Blog.all # this should be reloaded or you could use the .reload on this
# Änderungsinformationen, laden alten in neue
ex.
Old_blogs.each do |blog|
New_blogs.find(blog.id).title = blog.title
end