반응형
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
반응형
'code' 카테고리의 다른 글
gradlew 또는 gradle로 종속성 트리를 볼 수 없습니다. (0) | 2020.12.07 |
---|---|
Composer가 버전 X와 버전 Y 사이의 PHP 버전을 요구하도록합니다. (0) | 2020.12.07 |
Google Application Engine에서 사용하지 않는 색인을 제거하려면 어떻게해야합니까? (0) | 2020.12.07 |
Array.join ( "\ n")은 개행 문자와 결합하는 방법이 아니십니까? (0) | 2020.12.07 |
How can I convert Assembly.CodeBase into a filesystem path in C#? (0) | 2020.12.07 |