Jak zmusić ActiveRecord do przeładowania klasy?

Tworzę kilka migracji, z których niektóre są standardowymi migracjami "Utwórz tabelę" lub "zmodyfikuj tabelę", a niektóre modyfikują dane. Używam moich rzeczywistych modeli ActiveRecord do modyfikowania danych, a la:

Blog.all.each do |blog|
  update_some_blog_attributes_to_match_new_schema
end

Problem polega na tym, że jeśli załaduję klasę Blog, następnie zmodyfikuję tabelę, a następnie ponownie użyję klasy Blog, modele mają stare definicje tabel i nie mogą zapisać się do nowej tabeli. Czy istnieje sposób na ponowne załadowanie klas i ich definicji atrybutów, abym mógł ponownie użyć oni?

Author: James A. Rosen, 2008-10-14

3 answers

Odpowiedź brzmi: tak!

Blog.reset_column_information
 127
Author: James A. Rosen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-14 11:41:02

Zawsze używałem nowych modeli w migracjach

    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

Ale Blog.reset_column_information jest wygodniejszy.

 4
Author: Vitalie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-14 16:30:26

Tworzenie nowych instancji:


Old_blogs = Blog.all

# Zmień / zmodyfikuj tabelę db tutaj

New_blogs = Blog.all # this should be reloaded or you could use the .reload on this

# Zmień informacje, załaduj stare Na Nowe

Ex.

Old_blogs.each do |blog|
  New_blogs.find(blog.id).title = blog.title
end
 2
Author: Jon Smock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-21 09:57:42