Jes*_*tny 1 ruby database sqlite ruby-on-rails sqlite3-ruby
是否有一行简单的代码可以包含在种子文件的顶部,以便在插入新的种子数据之前清除每个表而不运行任何rake命令来回滚表或数据库?
我想的是:
[Foo, Bar].each{|class| class.destroy_all}
Run Code Online (Sandbox Code Playgroud)
关键是我想添加新数据,其中每个新插入从id开始:1.我想要避免的是删除一个包含100行的表,当我添加新数据时,它从101开始.
更新的答案
您要安装(或者您可以添加gem 'database_cleaner'到您的Gemfile)一个名为Database Cleaner的GEM ,它有助于清理您的数据库而不会影响您的数据库架构
.每次每次rake db:seed粘贴时都要清理数据库然后粘贴
# updated
require 'database_cleaner'
DatabaseCleaner.clean_with(:truncation)
Run Code Online (Sandbox Code Playgroud)
在种子文件的顶部.它将清除您的数据库并重新开始计数1.
免责声明:此更新的答案已经过测试,并且在我的系统中完美运行.
================================================== =========================
以前未经测试的答案
你能做到这一点,但这取决于你正在使用哪个数据库.
下面我为一些流行的数据库提供解决方案.
在MySQL中,TRUNCATE table; 删除所有行并重置自动增量计数器.
在PostgreSQL中,它不会自动执行此操作.你可以用TRUNCATE TABLE table RESTART IDENTITY;.
在SQLite中,没有TRUNCATE语句,相反,它是
DELETE FROM table;
DELETE FROM sqlite_sequence WHERE name='table';
Run Code Online (Sandbox Code Playgroud)
你也可以试试这个
ActiveRecord::Base.connection.tables.each do |table|
ActiveRecord::Base.connection.execute("TRUNCATE #{table}")
end
Run Code Online (Sandbox Code Playgroud)
您可以选择任何一个解决方案并将其实现到种子文件中.
我希望这能帮到您... ;)
免责声明:为了您的帮助,我已经分享了我的知识,但这个解决方案没有经过测试.
| 归档时间: |
|
| 查看次数: |
1974 次 |
| 最近记录: |