ActiveRecord를 클래스를 다시로드하도록하려면 어떻게해야합니까?
-
03-07-2019 - |
문제
나는 많은 마이그레이션을 만들고 있는데, 그 중 일부는 표준 "생성 테이블"또는 "수정 테이블"마이그레이션이며 일부는 데이터를 수정합니다. 실제 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
# 여기에서 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
제휴하지 않습니다 StackOverflow