61

いくつかの移行を作成しています。そのうちのいくつかは標準の「テーブルの作成」または「テーブルの変更」の移行であり、一部はデータを変更します。私は実際の ActiveRecord モデルを使用してデータを変更しています。

Blog.all.each do |blog|
  update_some_blog_attributes_to_match_new_schema
end

問題は、Blog クラスをロードしてテーブルを変更し、Blog クラスを再度使用すると、モデルに古いテーブル定義が含まれており、新しいテーブルに保存できないことです。クラスとその属性定義を再ロードして再利用できるようにする方法はありますか?

4

3 に答える 3

138

答えはイエスです!

Blog.reset_column_information
于 2008-10-14T11:41:02.293 に答える
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

しかしBlog.reset_column_information、もっと便利です。

于 2008-10-14T16:30:26.580 に答える
3

新しいインスタンスを作成します。


Old_blogs = Blog.all

# ここで db テーブルを変更/修正

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
于 2008-10-14T12:09:22.877 に答える