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?
57
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
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
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
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