如何在rails中重置单个表?

时间:2009-12-17 11:19:02

标签: ruby-on-rails

我希望主键值从1开始。

9 个答案:

答案 0 :(得分:176)

很多人(像我一样)来这里找到如何删除表中的所有数据。你走了:

$ rails console

> ModelName.delete_all

> ModelName.destroy_all

destroy_all检查依赖项和回调,并且需要更长的时间。 delete_all是一个直接的SQL查询。

此处有更多信息:http://apidock.com/rails/ActiveRecord/Base/delete_all/class

答案 1 :(得分:41)

我一直在使用rails console中的以下内容删除表中的所有内容,然后重置索引计数器(Ruby 2& Rails 4):

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

答案 2 :(得分:25)

要在SQLite中重置索引/主键,只需键入:

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

答案 3 :(得分:17)

@ khelll的链接很有帮助。要截断一个表的命令是:

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

答案 4 :(得分:10)

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

答案 5 :(得分:9)

自Rails 4.2起,您可以直接在truncate 上使用 ActiveRecord connection

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

会清除所有数据会重置表格中的自动增量计数器。在MySQL和Postgres中工作, 在Sqlite中工作。

答案 6 :(得分:6)

我正在使用Rails 4.2.0和Sqlite3

这对我有用(从上述所有内容中得到一点):

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

然后我能够将新记录添加到我的表中,索引从1开始。

答案 7 :(得分:3)

我认为你不能那样做。但是你可以write your own rake task

有关您的信息,您可以通过以下方式获取可用的佣金任务列表:

rake --tasks

你会得到类似的东西:

rake backups:clear             # Cleanup Backup files
rake clear                     # Cleanup temporary, log and backup files
rake db:fixtures:load          # Load fixtures into the current environment's database.  Load specific fixtures using FIXTURES=x,y
rake db:migrate                # Migrate the database through scripts in db/migrate. Target specific version with VERSION=x
rake db:schema:dump            # Create a db/schema.rb file that can be portably used against any DB supported by AR
rake db:schema:load            # Load a schema.rb file into the database
rake db:sessions:clear         # Clear the sessions table
rake db:sessions:create        # Creates a sessions table for use with CGI::Session::ActiveRecordStore
rake db:structure:dump         # Dump the database structure to a SQL file
rake db:test:clone             # Recreate the test database from the current environment's database schema
rake db:test:clone_structure   # Recreate the test databases from the development structure
rake db:test:prepare           # Prepare the test database and load the schema
rake db:test:purge             # Empty the test database
rake doc:app                   # Build the app HTML Files
rake doc:clobber_app           # Remove rdoc products
rake doc:clobber_plugins       # Remove plugin documentation
rake doc:clobber_rails         # Remove rdoc products
rake doc:plugins               # Generate documation for all installed plugins
rake doc:rails                 # Build the rails HTML Files
rake doc:reapp                 # Force a rebuild of the RDOC files
rake doc:rerails               # Force a rebuild of the RDOC files
rake log:clear                 # Truncates all *.log files in log/ to zero bytes
rake rails:freeze:edge         # Lock to latest Edge Rails or a specific revision with REVISION=X (ex: REVISION=4021) or a tag with TAG=Y (ex: TAG=rel_1-1-0)
rake rails:freeze:gems         # Lock this application to the current gems (by unpacking them into vendor/rails)
rake rails:unfreeze            # Unlock this application from freeze of gems or edge and return to a fluid use of system gems
rake rails:update              # Update both configs, scripts and public/javascripts from Rails
rake rails:update:configs      # Update config/boot.rb from your current rails install
rake rails:update:javascripts  # Update your javascripts from your current rails install
rake rails:update:scripts      # Add new scripts to the application script/ directory
rake stats                     # Report code statistics (KLOCs, etc) from the application
rake test                      # Test all units and functionals
rake test:functionals          # Run the functional tests in test/functional
rake test:integration          # Run the integration tests in test/integration
rake test:plugins              # Run the plugin tests in vendor/plugins/**/test (or specify with PLUGIN=name)
rake test:recent               # Test recent changes
rake test:uncommitted          # Test changes since last checkin (only Subversion)
rake test:units                # Run the unit tests in test/unit
rake tmp:assets:clear          # Clears all files in tmp/test/assets
rake tmp:cache:clear           # Clears all files and directories in tmp/cache
rake tmp:clear                 # Clear session, cache, and socket files from tmp/
rake tmp:create                # Creates tmp directories for sessions, cache, and sockets
rake tmp:pids:clear            # Clears all files in tmp/pids
rake tmp:sessions:clear        # Clears all files in tmp/sessions
rake tmp:sockets:clear         # Clears all files in tmp/sockets

via

答案 8 :(得分:1)

对于在数据库为Postgres时寻找此问题答案的其他人,您可以从Rails控制台执行此操作:

rails console
irb(main):028:0> ActiveRecord::Base.connection.execute("SELECT SETVAL('accounts_id_seq', 1)")

accounts中的accounts_id_seq是表格的名称。