Вопрос

Я создаю несколько миграций, некоторые из которых являются стандартными миграциями «создать таблицу» или «изменить таблицу», а некоторые из них изменяют данные.Я использую свои настоящие модели ActiveRecord для изменения данных, а-ля:

Blog.all.each do |blog|
  update_some_blog_attributes_to_match_new_schema
end

Проблема в том, что если я загружу класс Blog, затем изменю таблицу, а затем снова использую класс Blog, модели будут иметь старые определения таблиц и не смогут сохранить их в новую таблицу.Есть ли способ перезагрузить классы и определения их атрибутов, чтобы я мог использовать их повторно?

Это было полезно?

Решение

Ответ – да!

Blog.reset_column_information

Другие советы

Я всегда использовал новые модели при миграции

    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

Но Blog.reset_column_information это удобнее.

Создайте новые экземпляры:


Old_blogs = Blog.all

# здесь изменить/изменить таблицу БД

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

#изменяем информацию, загружаем старую в новую

бывший.

Old_blogs.each do |blog|
  New_blogs.find(blog.id).title = blog.title
end
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top