2012-04-09 2 views
1

빈 down 함수로 레일 3.2를 생성했습니다. 왜냐하면, 이전이 되돌릴 수 없기 때문에 (예외를 던지려고하지 않기 때문입니다). 마이그레이션을 성공적으로 실행했지만 효과가 없습니다. 롤백을하고 db : migrate를 다시 실행하면 효과가 적용됩니다.rails migration이 빈 down 함수로 동작하지 않습니다.

아무 것도하지 않는 코드로 빈 down 함수를 채우면 쉽게 해결할 수 있습니다.하지만 여전히 꽤 추합니다.

왜 이런 일이 발생하는지 알고 있습니까? 레일 버그 야?

+2

@SergioTulentsev 사실 ) – Ernest

+0

덕분에, 나는 :) – Indigon

답변

6

데이터베이스를 파괴하지 못하도록 예외가 throw됩니다. 되돌릴 수없는 경우라면 그럴 수 있습니다. 귀하의 #down는 다음과 같이 수 :

def down 
    raise ActiveRecord::IrreversibleMigration, "Explain why its irreversable!" 
    end 
가 명확 irreversable 마이그레이션에 대해 통지하고 그 뒤에 이유 :

편집 설명 다른 사람에게 두통을 많이 절약 할 수

: 내가이 확신 할 수 없습니다를 Rails 3.2.3의 동작. #down없이 몇 가지 마이그레이션을 만들었으며 exceptino도 제기되지 않았습니다. 어쩌면 당신의 코드에서 뭔가를 보여 주었을 것입니다.

EDIT 2 : 위/아래 방법을 사용할 때 요령을 되풀이하여 설명하면 ActiveRecord::IrreversibleMigration을 올릴 책임이 있습니다. 다른 경우에는 아무 것도 일어나지 않을 것입니다 (#down은 AR에 정의 된대로 nil을 반환합니다). #change을 사용할 때 동작이 다릅니다. 경우에 따라 여기에 정의 된 #inverse에 의해 언급 된 예외가 발생할 수 있습니다. https://github.com/rails/rails/blob/565bfb9cd49285ebaa170141b4996c22ba81de43/activerecord/lib/active_record/migration/command_recorder.rb#L39 이는 예상되는 동작입니다.

,하지만 심지어 어떤 사람들은 질문에 대한 인터넷 검색 여기에 상륙 불구하고, 답변을받을 자격이
+0

이 아마 몇 주 전까지 기능을을 허용했다조차 인식에 유래가되었습니다 맞아 솔루션, 아직 내가 설명한 동작에 대답하지 않습니다 :) – Indigon

+0

@ 인디곤 업데이트. – Ernest

관련 문제