2013-02-19 4 views
9

db/seed.rb 파일을 편집하고 rake db:seed 명령을 실행하여 테이블에 데이터 행을 시드했습니다. 무의식적으로, 나는 잘못된 정보를 그 줄에 넣었다. 그래서 이전에 추가 된 데이터 행을 제거하고 싶습니다. 의 rake db:rollback과 같은 레이크 명령이 있습니까?이전에 레일에 시드 된 데이터의 실행 취소

1 :

+2

드롭 데이터베이스를 다시하고 다시 씨앗. :) –

+0

@Sergio Tulentsev : 동의합니다. 그러나 나는 마지막 시드를하기 전에 이미 있던 데이터를 보관해야합니다. 마지막으로 시드 된 데이터 만 제거하려고합니다. 그 일을 도와 주실 수 있습니까? –

+2

그것에 대한 레이크 작업이 없습니다. 데이터를 수동으로 찾아서 삭제하십시오. 다시 일어날 것으로 예상되면 스크립트를 작성하십시오. –

답변

3

는이에 측면의 몇 가지가 있습니다

당신은 단순히 씨앗을 업데이트 한 후 rake db:seed을 다시 실행한다 : 다른 데이터가 데이터베이스에 없을 때 당신은 씨앗 데이터를 변경하려면 .rb 파일. 해당 모델에 아무 것도 추가하기 전에 MyModel.delete_all이 있는지 확인하십시오.

2 : 당신은 씨앗 데이터를 변경하기를 원하지만이 조금 어렵 데이터베이스

에 추가 된 다른 데이터가있다. 여기 자주 할 수있는 간단한 일이 수동으로 원시 SQL 명령문 중 하나를 사용하여 데이터를 변경하거나 PhpPpAdmin 같은 도구의 사용, PhpMyAdmin 등 지금


로하는 것입니다, possiby에게 함께이 해킹 한 가지 방법이있다 , 그리고 그것은 seed.rb 파일에서 몇 가지 부두를하는 것입니다.

if ENV['deseed'] 
    #Do your deseeding action here 
else 
    #Do your seeding here. 
end 

당신도 진짜 미친 얻을 수와 같은 것을 수행 : 그래서 당신은 당신의 seed.rb에, rake db:seed deseed=true를 실행할 수

deseed = ENV['desee'] 

#DANGER: Dirty hacks upcoming: 
deseed? myModelCall = MyModel.method(:destroy_all): myModelCall = MyModel.method(:create) 

myModelCall.call :user_id_or_whatevs => 23 #this creates or deletes a MyModel entity with the given parameters 
#NOTE this might not work in all cases and I would not necessarily recommend doing this. 

#<3uby