Как заставить ActiveRecord перезагрузить класс? - PullRequest
59 голосов
/ 14 октября 2008

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

Blog.all.each do |blog|
  update_some_blog_attributes_to_match_new_schema
end

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

Ответы [ 3 ]

130 голосов
/ 14 октября 2008

Ответ - да!

Blog.reset_column_information
5 голосов
/ 14 октября 2008

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

    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 удобнее.

3 голосов
/ 14 октября 2008

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


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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...