0

레일 3.2.13 데이터베이스 마이그레이션에서 모델의 또 다른 필드의 값에 따라 컬럼에 기본값을 추가. 기존의 날짜 필드와 관련된 텍스트 검색에 사용할 다른 긴 날짜 형식의 다른 문자열 필드를 추가 할 계획입니다. 이것은 시각 장애인을위한 텍스트 검색을 용이하게하기위한 것입니다. 나는이 같은 짓을이미 내 모델에서 날짜 필드 (문자열)가

는 전에 잘했다.

add_column :media_libraries, :media_year, :string, default: Time.now.year 

그러나 내가하고 싶은 것은 날짜 필드를 추가하고 기존 날짜 필드의 값을 사용하여 새 날짜 필드를 기본값으로 설정하는 것입니다.

는 내가 새로운 긴 날짜 필드의 값을 초기화하는 데 사용할 필드가 내보기 중 하나에 아래의 코드를 가지고있다.

media_created.to_date 

레코드의 다른 필드 값에 따라 기본값을 설정할 수있는 마이그레이션에서 이렇게 할 수 있습니까?

add_column :media_libraries, :media_created_en, :string, default: :media_created.to_date.strftime("somedateformat") 

는 내가 대답 중 하나가 마이그레이션 내에서 쿼리를 제안 다른 포스트 add a database column with Rails migration and populate it based on another column을 읽었습니다. 이것은 그것을 구현하려는 나의 시도 일 것입니다. 그러나 스택 오버플로에 게시 된 다른 사용자는 마이그레이션에서 다른 필드를 참조하는 것이 좋지 않다고 생각합니다. 이 문제는 일회성이므로 걱정하지 않아도됩니다.

MediaLibrary.update_all(media_created_en: :media_created.to_date.strftime("%B %d, %Y"), media_created_fr: :media_created.to_date.strftime("%d %B %Y"), media_created_pt: :media_created.to_date.strftime("%d %B %Y"), media_created_es: :media_created.to_date.strftime("%d de %B de %Y")) 

업데이트 할 레코드가 1000 개 이상이므로 기존 레코드에 대해이 작업을 수행하고 싶습니다. 내 모델 또는 컨트롤러에 코드를 넣어 모델에 대한 향후 업데이트를위한 필드를 설정합니다.

나는 모든 곳에서 보았다하지만 기본 또는 위의 하나의 예에 사용되는 내장 함수를 찾을 수 있습니다. API는 'options {}'이외의 것을 말합니다. 이 작업을 수행 할 수 없으면 응용 프로그램의 관리 섹션에서이 작업을 수행 할 수있는 메소드를 작성할 준비가되었습니다.

도움이 될 것입니다. 나는 계속 수색 할 것이다.

답변

0

나는 연구를 계속하고 아무 것도 발견하지 못 했으므로 마이그레이션에서 몇 가지 시도를하기로 결정했습니다. 내 기본 값으로 모델의 필드를 성공적으로 통합 할 수 없었습니다. 내가 시간의 위기에 빠졌을 때, 나는 마이 그 레이션에서 필드를 생성하기로 결정한 다음, 컨트롤러에 내 모델의 필드를 업데이트하는 메소드를 작성했습니다. 이제 필드가 올바르게 업데이트되었는지 확인하기 위해 레코드 추가 필드를 업데이트하는 코드를 작성합니다.

누구나 해결책이 있다면 여기에 게시 해주세요.하지만 계속 진행하고 있습니다.