2013-10-05 1 views
1

사실 날짜 유형의 열이있는 표가 있지만 그 해만 사용합니다. 얼마나 일년을 유지하기 위해 그것을 정수형으로 변경합니까? 3 단계 마이그레이션이 필요합니까? 그리고 어떻게 롤백을합니까?Rails 마이그레이션 : 열 데이터 유형을 날짜에서 정수로 변경하십시오.

+0

날짜는 그대로두고 연도 만 표시하십시오. 몇 달 또는 며칠을 입력하는 것을 원하지 않으면 1 월 1 일을 사용하십시오. –

+0

나는 @RobertHarvey에 동의한다. 나는 아직도 그 날짜의 "년"을 의미하는 한 그것을 남겨 두었다. 정수를 원한다면 한 번에 모든 작업을 수행 할 수 있지만 롤백을 사용하면 버려지는 월 및 일 정보를 직접 복구 할 수 없습니다. – lurker

답변

2

나는 다른 포스터에 동의 : 즉 진정으로 캡처 할 정보 인 경우 정수로 해 저장하는 것이 더 낫다. 당신이하지 않으면 전체 날짜를 저장하기 때문에 실제로 정보가 잘못 표시되는 것을 저장하고 있기 때문입니다. 즉, 하루와 달 및 일부 캘린더 메타 데이터를 저장할 수 있습니다. 이것을 사용할 때마다 이것을 명심해야하며 계산이 실제로하고 싶은 것을 확실히해야합니다. 즉, Rails와 Ruby에서 사용되는 많은 날짜 및 시간 클래스와 라이브러리가 모두 사용되고 있습니다.

연도가 필요하고 원하는 경우 1 년 만 저장하십시오. 이를 달성하기 위해 간단하고 보수적 인 방법을 사용합니다. 몇 가지 간단한 마이그레이션을 수행하십시오.

  1. 새해의 열을 추가하십시오.
  2. 데이터를 변환하십시오.
  3. 이전 연도 열을 삭제하십시오.
2

저는 다른 포스터에 동의합니다. 날짜 값으로 유지하고 연도 만 표시하는 것이 좋습니다. 계산 목적으로, 그 열의 모든 날짜 값을 01-01-YYYY로 설정할 수 있습니다. 그런 다음,보기에 그 해를 표시 할 때 수행

#- my_date_value=Wed, 18 Sep 2013 19:21:11 UTC +00:00 
my_date_value.year 
=> 2013 

<%= my_date_value.year %> 

을하지만,이 날짜 값을 결정하는 경우에, 당신은 등 마이그레이션을 수행 할 수 있습니다 년 전용 정수 필드로 변환하려면 다음

class ChangeThingDateToYear < ActiveRecord::Migration 
    def change 
    add_column :things, :my_year_value, :integer 

    # You need to tell ActiveRecord to refresh the object 
    MyDatedThings.reset_column_information 
    MyDatedThings.all.each do |r| 
     r.my_year_value = r.my_date_value.year 
     r.save! 
    end 

    remove_column :things, :my_date_value 

    # If you want to keep the same column name 
    rename_column :things, :my_year_value, :my_date_value 
    end 
end 
+0

의견을 제시해 주셔서 감사 드리며 마이그레이션 코드를 보내 주셔서 감사합니다. 굉장히 유용하다! 저는 실제로 날짜 유형을 사용하고 있으며 여러분이 말한 것처럼 올해 부분과 만 작업하기 때문에 지금 다른 방법을 시도 할 것입니다. 감사. – hector

관련 문제