如何在Rails中填充参考表

时间:2018-11-16 08:39:47

标签: ruby-on-rails activerecord

我正在寻找在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应该用于参考数据,而不是测试设置。)

2 个答案:

答案 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的基本用法。