Ruby on rails CSV导入到表中的文件在Rails服务器重新启动时重复

Ruby on rails CSV导入到表中的文件在Rails服务器重新启动时重复,ruby-on-rails,csv,Ruby On Rails,Csv,我已经生成了一个脚手架,它呈现了表格: 植物id 种 矢量 链接 基因分型总结 短笺 居住 我已经导入了我的CSV文件 需要“csv” csv\u text=File.read('app/assets/csv/plant\u table.csv') csv=csv.parse(csv_文本:headers=>true) csv.do每行| 测试,创建!(行到_散列) 结束 CSV文件文本: Plant_ID,Species,Vector,Link,Genotyping_summary,Sh

我已经生成了一个脚手架,它呈现了表格:


植物id
种
矢量
链接
基因分型总结
短笺
居住
我已经导入了我的CSV文件

需要“csv”
csv\u text=File.read('app/assets/csv/plant\u table.csv')
csv=csv.parse(csv_文本:headers=>true)
csv.do每行|
测试,创建!(行到_散列)
结束
CSV文件文本:

Plant_ID,Species,Vector,Link,Genotyping_summary,Short_note,Live
PLANT1,C. sinsensis “Valencia”,YCVXXX1,www.google.com,./files/PLANT1.png,,TRUE
PLANT2,C. sinsensis “Valencia”,YCVXXX1,www.google.com,./files/PLANT2.png,,TRUE
我的问题是,每次我关闭rails服务器并使用
rails s
重新启动它时,表都会自动重复。我希望它:

  • 删除所有内容并从CSV文件中再次创建 或
  • 检查项目是否已存在,如果已存在,则跳过它。以某种方式避免重复
这可能吗? 我试过
:unique=>true
,因为我在另一篇文章中读到了这一点,但从我所读的内容来看,这是面向数据库的

首先
rails s

再次取消并
rails

您可以执行以下操作:

require 'csv'    
csv_text = File.read('app/assets/csv/plant_table.csv')
csv = CSV.parse(csv_text, :headers => true)
Test.destroy_all # << Add this line
csv.each do |row|
  Test.create!(row.to_hash)
end
需要“csv”
csv\u text=File.read('app/assets/csv/plant\u table.csv')
csv=csv.parse(csv_文本:headers=>true)

Test.destroy#您可以在导入文件之前执行
Test.delete_all
。你把
唯一:true
放在哪里了?我不确定为什么每次启动时都需要导入文件,但是如果需要经常截断/种子数据库,请考虑检查<代码>种子<代码>文件和<代码>:重置< /Cord>命令。很好,这也是正确的答案,但是我会尝试检查种子,这似乎是一个更干净的解决方案。谢谢,我不太了解种子,但是当我重新启动rails服务器时,每个页面的ID都会增加以前的ID数。。。e、 g:如果我的工厂:YCCxx1的id为1,并且我重新启动了服务器,则id为14。如果我再次重新启动,它将是id=27,依此类推。你知道为什么吗这不是一件大事,但很不方便如果你想让你的数据库再次从1开始,你需要告诉它,这取决于每个数据库引擎,我想,google
yourdatabase reset autoincrement id counter
当我重新启动rails服务器时,每个页面的id都会增加以前的id数。。。e、 g:如果我的工厂:YCCxx1的id为1,并且我重新启动了服务器,则id为14。如果我再次重新启动,它将是id=27,依此类推。为什么会这样?ID是在数据库中生成的。每次创建记录时,它都会创建一个新id。这确保所有id都是唯一的,但这并不意味着如果删除记录,这些id就不会被重用。