如何强制ActiveRecord重新加载一个类?

Jam*_*sen 59 ruby migration activerecord ruby-on-rails

我正在创建一系列迁移,其中一些是标准的"创建表"或"修改表"迁移,其中一些迁移修改数据.我正在使用我的实际ActiveRecord模型来修改数据,a:

Blog.all.each do |blog|
  update_some_blog_attributes_to_match_new_schema
end
Run Code Online (Sandbox Code Playgroud)

问题是,如果我加载Blog类,然后修改表,然后再次使用Blog类,模型具有旧的表定义,并且无法保存到新表.有没有办法重新加载类及其属性定义,以便我可以重用它们?

Jam*_*sen 132

答案是肯定的!

Blog.reset_column_information
Run Code Online (Sandbox Code Playgroud)

  • 重置所有列!`的ActiveRecord :: Base.descendants.each {| C | c.reset_column_information}` (3认同)
  • 留意有关系的模特.如果是`类博客; belongs_to所有者; 结束`,然后你可能需要除了Blog之外的'Owner.reset_column_information`. (2认同)

小智 5

我一直在迁移中使用新模型

    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
Run Code Online (Sandbox Code Playgroud)

但是Blog.reset_column_information比较方便。