2010-11-19 2 views
0

나는 다음에 몇 가지 조언을 찾고 있어요 :Rails Devs 핸들 모델/기본값 문제 게시 시작 하시겠습니까?

  1. 앱이 새로운 기능을 개발하는 동안, 당신은 열을 추가 할 필요가 고객 및 실제 데이터
  2. 살이에 말을 할 수있는 프로젝트 테이블
  3. 새로운 열이 모두 전진 새로운 프로젝트 잘 작동 before_save

을 사용하여 모델에서 발생되는 어떤 종류의 UID이다. 그러나 기존의 모든 프로젝트는 해당 칼럼에 대해 아무 것도없고 모든 것이 중단됩니다.

레일스에서 ​​어떻게 처리합니까?

감사

답변

2

이 작업은 레이크 작업보다는 마이그레이션 스크립트 내에서 처리되어야한다고 생각합니다.

정확하게 이해하면 칼럼이 과거 기록에 추가 될 때 한 번만 수행하면됩니다. 내 생각에 마이그레이션 스크립트는 앱에 깨진 데이터 세트를 남겨서는 안됩니다. 마이그레이션은 스키마 변경 이외의 목적으로 설계되었습니다.

def self.up 
    change_table :projects do |t| 
    t.integer 'new_column' 
    end 

    Project.reset_column_information 

    Project.all.each do |project| 
    project.new_column = some_value 
    project.save 
    end 
end 

reset_column_information 방법은 방금 추가 한 새 열을 인식 레일한다 :

다음은 예입니다.

+0

나는 이것을 깨끗하게 좋아한다. 배포시 기억이 덜 안전하게 보입니다. 스티브 고마워. – AnApprentice

3

당신은 단순히 UID 및 각 프로젝트에 한하지 않고 모든 프로젝트에 끌어 레이크 작업을 만들 수 있습니다.

마이그레이션을 실행 한 후 작업을 실행하십시오. 모든 프로젝트에 이제 UID가 있어야합니다.

+0

동의. 이 작업이 한 번 수행되는 경우 일반적으로 마이그레이션과 밀접하게 관련되어 있으므로 마이그레이션 할 때 바로 레이크 작업에 사용할 코드를 넣으면됩니다. 또는이 열에 대해 nil 값을 허용하면이 열을 참조하는 응용 프로그램의 부분을 변경하고 적절하게 처리합니다 (nil을 확인하십시오). – johnmcaliley

+0

레이크 작업 생성 제안. 그것은 내가하는 일이다. :) – Alex

+0

모두에게 감사드립니다. 나는 이것이 유용하기 때문에 Google을 통해이 주제에 대한 자습서가없는 것 같지만 .... 레일 디렉토리에서 갈퀴 작업을 저장하여 Heroku에서 실행할 수 있도록하는 위치는 어디입니까? 또한 레이크 작업의 기본 구조 또는 레이아웃을 보여주는 답변을 업데이트 할 수있는 방법은 무엇입니까? – AnApprentice