2012-06-16 4 views
0

나는 Lynda 과정을 수행 중이며 데이터베이스를 마이그레이션하는 중입니다. 그래서 처음에는 비디오보다 Rails (3.2.6)의 새로운 버전에서 디폴트가되는 것 사이에 약간의 구문 차이가있는 것처럼 보였습니다. 그러나 Ruby 웹 사이트를 살펴본 결과 문제가되지 않을 것이라고 생각했습니다. .Ruby on Rails 데이터베이스 마이그레이션 불일치 (Ruby on Rails 3 필수 교육 제 6 장)

그러나 내가 붙어있는 곳은 내 Users을 작성할 때 열을 정의하는 모델 (attribs)을 작성하는 것으로, 자신을 정의한 것 (이름, 성, 이메일 및 비밀번호)을 제외한 모든 것을 작성합니다.)가 생성되지 않습니다. 생성 된 날짜, 수정 된 날짜 및 ID 만이 기본값이므로 상자 밖에있는 것으로 가정합니다. 여기

비디오가 사용할 알려주는 코드입니다

class CreateUsers < ActiveRecord::Migration 
    def self.up 
    create_table :users do |t| 
     t.string "first_name", :limit => 25 
     t.string "last_name", :limit => 50 
     t.string "email", :default => "", :null => false 
     t.string "password", :limit => 40 
     t.timestamps 
    end 
    end 

    def down 
    drop_table :users 
    end 
end 

나는 아래의 차이를 중심으로 두 asteriks 넣어 가지고, 내 버전이 아니라 비디오 버전 def up입니다 기본되는 주요 일이 def self.up입니다. 내가 레일 사이트에서 문서를 읽을 때 알아 차린 다른 점은 따옴표 대신 :을 사용해야한다는 것입니다. 비디오에서 제공 한 코드가 작동하지 않아서 아래 코드도 시도했습니다. 그러나 실제로 테이블에 t.strings이 생성되지 않은 동일한 결과가 나타납니다.

class CreateUsers < ActiveRecord::Migration 
    **def up** 
    create_table :users do |t| 
     t.string **:**first_name, :limit => 25 
     t.string **:**last_name, :limit => 50 
     t.string **:**email, :default => "", :null => false 
     t.string **:**"password", :limit => 40 
     t.timestamps 
    end 
    end 

    **def down** 
    drop_table :users 
    end 
end 

그래서 두 가지 질문 :

  1. 나는 올바른 구문을 사용하지 않는 건가요?

  2. 처음으로 테이블을 설정 한 후 테이블을 다시 설정하면 이전 구성보다 우선 적용됩니까? 완전히 새로운 데이터베이스를 다시 만들어야합니까? 나는 '사용자'파일을 변경하고 구문을 재정렬 한 다음 rake db를 수행하는 것으로 확신하지 못합니다. migrate는 내가 무엇이 있는지 무시할 수 있습니다.

도움을 주셔서 감사합니다.

-dave

+0

레일 서버를 실행하기 전에'rake db : migrate'를 했습니까? – uday

답변

1

기호 대 문자열은 중요하지 않습니다. Self.up과 Up은 이전 스타일이지만 중요한 것은 아닙니다. 레일스는 이미 스키마 마이그레이션 테이블에서 실행 된 마이그레이션을 추적합니다. 그 결과, 일단 이주가 실행되면 레일이 변경 되었더라도 다시 실행되지 않습니다.

당신은 할 수

rake db:rollback 

레일이 마지막으로 실행 된 마이그레이션에 대한 아래의 방법을 실행 (그래서 당신이 다음 실행 db:migrate 때 다시 실행됩니다)

그것은 더 될 수 있습니다하려면 여분의 열을 추가하기 위해 새로운 마이그레이션을 생성하는 것이 적절합니다. 이미 원래의 마이그레이션을 리포지토리에 푸시했다면 일반적으로 이렇게 할 것입니다.

+0

완벽하게 작동했습니다! 고마워요. 많은 프레드릭! –