我正在寻找在Rails应用程序中填充参考表的最佳方法-用于开发,测试和生产(当然,最重要的是用于生产)。 (理想情况下,我认为对这三个方法使用基本上相同的过程将是最好的,或者至少是最简单的解决方案;但是我怀疑这可能不切实际或不明智。)
例如,我将创建一个表格,用于存储通常不会改变的基本股票信息(字段:符号,名称,行业,行业)。我需要在应用程序第一次在生产中运行时(例如,通过一个包含所有美国股票数据的文本文件加载)此表,以及在尚未加载该表时进行测试和开发。 (如果我的问题很重要,则该表很有可能随着新数据(例如,对于刚上市的公司)的可用而更新。)
令我惊讶的是,我没有在stackoverflow中找到这个问题。它可能在其中,但在我尝试的搜索中找不到。我发现了几个类似的问题(例如,播种测试数据),但距离我的目的还不够。我什至找不到很多通过谷歌搜索!但是,我确实发现了这一点: https://codingitwrong.com/2016/07/29/how-to-seed-and-migrate-rails-data.html 特别是,作者说:“种子文件通常用于这两个[参考数据与样本数据],但是这使得在生产中设置初始数据非常困难。Rails指南并未明确指出这些种子文件用于... 将两者分开可能会很有用。 Thoughtbot建议使用种子文件作为参考数据,并为示例数据设置单独的Rake任务。”
(注意:基于以上引用,我在Google上搜索了“ rails seed.rb文件的用途是什么?”,并找到此问题:What is the function of the seeds.rb file?,建议使用seeds.rb作为参考数据。也许使用seed.rb是最好的答案。如果是这样,则似乎意味着seed.rb应该用于参考数据,而不是测试设置。)
答案 0 :(得分:1)
使用所有必需的数据创建CSV。然后将CSV保留在db
文件夹中。
# db/seeds.rb
require 'csv'
csv_text = File.read(Rails.root.join('db','file_name.csv'))
然后使用以下代码循环遍历CSV数据:
csv = CSV.parse(csv_text, :headers => true)
csv.each do |row|
puts row.to_hash
# each row will be a hash object. Use the data in this hash object to create records in the DB.
end
确保CSV文件的第一行中包含标题。
现在,您可以使用rails db:seed
将CSV文件数据导入数据库。
答案 1 :(得分:0)
我从您的问题中了解到的是,您想要一种首次批量初始化表的方法。
您可以创建该表的记录的excel文件,然后将该excel文件导入您的应用程序,并为excel文件中的每个条目创建记录。
This railscasts video涵盖了提供此功能的名为roo的gem的基本用法。