質問

多数の移行を作成していますが、その一部は標準の「テーブルの作成」です。または「表を変更」」移行、およびその一部はデータを変更します。実際の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
  

#ここで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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top