code

ActiveRecord가 클래스를 다시로드하도록하려면 어떻게해야합니까?

codestyles 2020. 12. 7. 08:09
반응형

ActiveRecord가 클래스를 다시로드하도록하려면 어떻게해야합니까?


나는 많은 마이그레이션을 만들고 있는데, 그중 일부는 표준 "Create table"또는 "modify table"마이그레이션이고 일부는 데이터를 수정합니다. 실제 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

참고 URL : https://stackoverflow.com/questions/200813/how-do-i-force-activerecord-to-reload-a-class

반응형