그 주변의 일이 도움이 될 수 있습니다 :
먼저 마이그레이션하고 생성 :
rename_column :the_models, :time, :old_time
add_column :the_models, :time, :time
을 그래서 지금을, 필드있을 것이다 모델은 원래 시간 데이터, 새로운 time
필드를 포함 old_time
라고 올바른 필드 유형을가집니다.
결과적으로 기존 양식은 모든 시간 데이터를 잃어버린 것 같지만 적어도 결과는 the_model.time
입니다. 일부 주변
실제 작업 :
class TheModel < ActiveRecord::Base
def time
read_attribute(:time) || Time.parse(read_attribute(:old_time))
end
end
그래서 지금 시간 값이 제출 한
time
에 저장됩니다.
time
이 0 일 경우 old_time
에서 시간 값을 가져 와서 시간 개체로 변환하려고 시도합니다. 당신 같은 줄 것
- Time.parse ("12시 34분") :
는 두 가지 단점이 있습니다 당신이 그것을 단지 시간과 분을 준 때문에 2010-12-14 12:34:00 +0800
를, 다른 필드는 신뢰할 수 없습니다.
- 데이터베이스에 거의 사용되지 않는 필드
old_time
이 있습니다. 따라서 모든 old_time
값이 time
필드로 변환되었다는 확신을 갖고 나면 해당 필드를 완전히 제거 할 수 있습니다.
하나 더 참고 :
당신은 아마 text_field을 사용 :time
필드, 기존 양식을 변환해야합니다. text_field가 2010-12-14 12:34:00 +0800
과 같이 표시 될 수 있습니다.
당신이 정말로 여전히 text_field을 사용하려면
, 당신은 할 수 :
def time
t = read_attribute(:time)
t.nil? ? read_attribute(:old_time) : t.strftime("%H:%M")
end
def time=(val)
write_attribute(:time, Time.parse(val))
end
당신은 필드 유형을 변경할 수 있지만 여러 조치를 취하고 있습니다. 가치가 있는지 여부가 다음 질문입니다. –
네 ... 전 필드 유형을 변경하고 싶지 않습니다. 들어가는 데이터 형식을 찾는 방법을 찾으십시오. – bgadoci
필드 유형을 변경하려면 ... 기존 데이터를 매핑 할 수 있습니까? – bgadoci