[ruby-on-rails] 레일에서 단일 테이블을 재설정하는 방법은 무엇입니까?

기본 키 값이 1부터 다시 시작되기를 원합니다.



답변

SQLite에서 인덱스 / 기본 키를 재설정하려면 다음을 입력하십시오.

$ rails console
> ActiveRecord::Base.connection.execute("DELETE from sqlite_sequence where name = 'yourtablename'")


답변

저와 같은 많은 사람들이 테이블의 모든 데이터를 삭제하는 방법을 찾기 위해 여기에 왔습니다. 여기 있습니다 :

$ rails console

> ModelName.delete_all

또는

> ModelName.destroy_all

destroy_all은 종속성 및 콜백을 확인하고 시간이 조금 더 걸립니다. delete_all은 직접적인 SQL 쿼리입니다.

자세한 정보 : http://apidock.com/rails/ActiveRecord/Base/delete_all/class


답변

Rails 콘솔에서 다음을 사용하여 테이블의 모든 항목을 삭제 한 다음 인덱스 카운터 (Ruby 2 및 Rails 4)를 재설정했습니다.

> ModelName.delete_all
> ActiveRecord::Base.connection.reset_pk_sequence!('plural_model_name')


답변

@khelll의 링크가 도움이됩니다. 하나의 테이블을 자르려는 명령은 다음과 같습니다.

ActiveRecord::Base.connection.execute("TRUNCATE #{table_name}")


답변

Rails 4.2부터 ActiveRecord 연결truncate 에서 직접 사용할 수 있습니다 .

ActiveRecord::Base.connection.truncate(:table_name)

모든 데이터를 쳐 하고 자동 증가 카운터를 재설정 표에. MySQL 및 Postgres에서 작동하며 Sqlite 에서는 작동 하지 않습니다 .


답변

gem 'database_cleaner'Gemfile에 추가 하고을 실행 $ bundle install한 후 다음을 수행하십시오.

> DatabaseCleaner.clean_with(:truncation, :only => ['yourtablename'])

더 많은 테이블을 지정할 수 있습니다.

> DatabaseCleaner.clean_with(:truncation, :only => ['table1', 'table2', 'table3'])

마지막 매개 변수를 그대로두면 전체 데이터베이스가 잘립니다.

> DatabaseCleaner.clean_with(:truncation) # your database is truncated


답변

Rails 4.2.0 및 Sqlite3를 사용하고 있습니다.

저에게 도움이 된 것은 다음과 같습니다 (위의 모든 것에서 약간 가져옴).

$ rails c
> ModelName.delete_all
> ActiveRecord::Base.connection.execute("DELETE from sqlite_sequence where name = 'table_name'")

그런 다음 인덱스가 1부터 시작하여 테이블에 새 레코드를 추가 할 수있었습니다.