나는이 테스트 데이터베이스를 지금까지 정크로 가득 채웠습니다. 이제 레일즈 콘솔에서 모든 레코드와 종속성을 삭제하는 몇 가지 Table.destroy_all 명령을 수행했습니다. 하나; 나는 ID의 등등이 다시 1에서 시작하도록 모든 것을 자르고 싶습니다. Rails 3에 어떤 방법이 있습니까?레일 콘솔이있는 테이블을 자릅니다.
답변
허용 대답에만 작동합니다.
Model.destroy_all # Only necessary if you want to trigger callbacks.
ActiveRecord::Base.connection.execute("Delete from #{table_name}")
ActiveRecord::Base.connection.execute("DELETE FROM SQLITE_SEQUENCE WHERE name='#{table_name}'")
: 그렇게 다음을 수행 TRUNCATE 지원하지 않습니다,
Model.destroy_all # Only necessary if you want to trigger callbacks.
ActiveRecord::Base.connection.execute("TRUNCATE #{table_name} RESTART IDENTITY")
당신이 SQLite는을 사용하는 경우
은 (콜백 포함) 단일 테이블을 삭제하고 ID를 1부터 시작 얻을 수
다음 테스트 실행시 데이터베이스를 다시 작성하기 만하면됩니다 (삭제 후 자동으로 실행됩니다). 당신은 전체 데이터베이스를 다시해야하는 경우
rake db:drop RAILS_ENV=test
rake db:rollback STEP=3 RAILS_ENV=test
여기서 3은 db/migrate에있는 마이그레이션 수를 나타냅니다. 예를 들어 : 가지고있는 경우
db/migrate
20140121065542_create_users.rb
20140121065710_create_profiles.rb
20140121065757_create_articles.rb
20140121065900_create_comments.rb
20140121065929_create_categories.rb
따라서 총 5 개의 마이그레이션을 제거해야합니다. 내가 rake db:rollback STEP=5 RAILS_ENV=test
을 수행하면 모든 테이블이 내 테스트 데이터베이스에서 삭제되고 모든 환경 (생산, 테스트, 개발) 테이블이 RAILS_ENV = 테스트를 삭제하고 테이블이 삭제되고 마이그레이션 데이터에서 db/shema.rb 파일도 삭제됩니다 .
rake db:reset
은 rake db:drop db:setup
입니다. 즉, 데이터베이스를 제거하고 데이터베이스를 다시 설정하십시오. 콘솔에서이 작업을 수행하기 위해 요구
이렇게하면 중요한 DATA를 잃어 버릴 것이므로 권장하지 않는 것이 좋습니다. –
(파티에 조금 늦게, 내가 아는)
:
2.1.2 :001 > Post.all.each do |post|
2.1.2 :002 > post.destroy!
2.1.2 :003 > end
뿐만 아니라 작품 ...
이를 본질적으로 모든 게시물을 반복하고 그들을 파괴합니다.
이것은 나를 위해 일한1.'each'를 사용하지 말고'find_each'를 사용하십시오. 그것은 하나의 쿼리에서 10 억 개의 레코드를 얻지 못하도록합니다. 2. 콜백을 실행하지 않고 DB에서 레코드를 삭제해야하는 경우 루프를 사용하지 마십시오. 그냥'Post.delete_all'을하십시오. – Kukunin
>>> 액티브 :: 자료 (나는 레일 4를 사용하고 있지만) 그래도 ...
같은 논리뿐만 아니라 레일 3 일을해야 당신의 자동 증가 값을 변경하지 않습니다. 이 것이
MyModel.connection_pool.with_connection { |c| c.truncate(MyModel.table_name) }
참고 : connection.execute ("TRUNCATE의 테이블 _")
당신은 MySQL의 또는 Postgre하지 sqlite3를을 (TRUNCATE
를 지원하지 않는)를 사용하는 가정은 다음을 수행 할 수 ActiveRec를 호출하지 않는다. ord 콜백.
- 1. LINQ를 사용하여 테이블을 자릅니다.
- 2. Linq의 엔티티 테이블을 자릅니다.
- 3. 테이블 크기 제한에 도달하면 MYSQL에서 테이블을 자릅니다?
- 4. SqlBulkCopy 전에 자릅니다.
- 5. 웹 기반 관리 콘솔이있는 여러 AppDomain
- 6. 나는 테이블을 얼마나 레일
- 7. 문자열을 자릅니다.
- 8. 레일 콘솔이 Activerecord 출력을 자릅니다 - 잘리는 것을 방지하는 방법?
- 9. 조인 테이블을 조인하는 레일 모델
- 10. 레일은 저장시 해시를 자릅니다.
- 11. JOptionPane.showMessageDialog JTextArea 메시지를 자릅니다
- 12. Subwcrev.exe는 버전 파일을 자릅니다.
- 13. Bash : 배열을 어떻게 자릅니다?
- 14. XmlDocument.WriteTo 결과 파일을 자릅니다.
- 15. UIScrollView는 레이블을 자릅니다.
- 16. Twig의 디버그가 배열을 자릅니다?
- 17. RadGrid 열의 텍스트를 자릅니다
- 18. org.eclipse.swt.text, 자동으로 텍스트를 자릅니다?
- 19. 라텍스 비머가 텍스트를 자릅니다.
- 20. 줄을 80 자로 자릅니다.
- 21. NSString을 너비로 자릅니다
- 22. Android ImageButton이 아이콘을 자릅니다.
- 23. 오디오 파일을 자동으로 자릅니다.
- 24. XSL : HTML을 잘라내어 자릅니다.
- 25. UITextField에서 왼쪽의 텍스트를 자릅니다.
- 26. log4j가 스택 트레이스를 자릅니다.
- 27. 화면 해상도로 이미지를 자릅니다.
- 28. AutoCompleteTextView가 마지막 행을 자릅니다.
- 29. 레일 3, 레일 콘솔에서 habtm 테이블을 업데이트하는 방법은 무엇입니까?
- 30. 여러 지연된 작업 잠금 테이블을 실행하는 레일
한 테이블을 잘랐을 때의 답이 맞습니다. (그리고 고마워합니다.) 나는 "모든 것"을 잘라 버릴 것을 요구했기 때문에 Yam Marcovic의 대답을 받아 들였습니다. – CaptainCarl
투표 해 주셔서 감사합니다. 전체 db 요구 사항은 질문에서 명확하지 않았습니다!단지 정보를 위해서, rake db : drop은 데이터베이스를 삭제할 것입니다. 요구 사항이 모든 테이블을 잘라내는 것이라면, ActiveRecord :: Base.connection.tables.collect {| table_name | ActiveRecord :: Base.connection.execute ("TRUNCATE # {table_name}")}. 그것은 콜백을 돌볼 수는 없지만 모든 테이블을 잘라내는 것은 필요하지 않다고 생각합니다. –
destroy_all은 각 레코드에서 destroy를 호출합니다. 이는 테이블을 잘라 버리는 것과는 완전히 다릅니다. From Documents : # 각각의 # 레코드를 인스턴스화하고 + destroy + 메소드를 호출하여 + conditions +와 일치하는 레코드를 소멸시킵니다. 각 객체의 콜백은 # 실행되었습니다 ( : 종속성 연관 옵션 및 # + before_destroy +/after_destroy + Observer 메소드 포함). 파괴 된 객체 컬렉션 # 을 반환합니다. 각각 # 변경 사항을 적용하지 말아야 함을 나타냅니다 ( # persisted 일 수 없으므로). – justingordon