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?

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top