我正在创建一堆迁移,其中一些是标准的“创建表”或“修改表”迁移,其中一些是修改数据。我正在使用我的实际 ActiveRecord 模型来修改数据,例如:
Blog.all.each do |blog|
update_some_blog_attributes_to_match_new_schema
end
问题是如果我加载博客类,然后修改表,然后再次使用博客类,模型有旧的表定义,无法保存到新表。有没有办法重新加载类及其属性定义,以便我可以重用它们?
我正在创建一堆迁移,其中一些是标准的“创建表”或“修改表”迁移,其中一些是修改数据。我正在使用我的实际 ActiveRecord 模型来修改数据,例如:
Blog.all.each do |blog|
update_some_blog_attributes_to_match_new_schema
end
问题是如果我加载博客类,然后修改表,然后再次使用博客类,模型有旧的表定义,无法保存到新表。有没有办法重新加载类及其属性定义,以便我可以重用它们?
答案是肯定的!
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