如何使用 json 文件在 ruby​​ on rails 中填充模型(数据库)?

Posted

技术标签:

【中文标题】如何使用 json 文件在 ruby​​ on rails 中填充模型(数据库)?【英文标题】:How to fill model(database) in ruby on rails with json file? 【发布时间】:2021-10-20 12:34:00 【问题描述】:

我有一个 json 文件,里面有很多电影。我想创建一个模型“电影”并用该 json 文件中的所有电影填充它。我该怎么做?我知道我可以将 json 文件解析为哈希,但这不是我要找的东西。

【问题讨论】:

【参考方案1】:

您要查找的正确术语是“播种”!

但是,您将需要一个数据库,以及一个迁移来创建数据库以及关联的movies 表。 (有很多关于如何做到这一点的指南,以及官方documentation)。

完成后,您需要使用 json 文件中的数据“播种”数据库。

seeds.rb 文件中,假设 JSON 文件是 JSON 格式的 Movies 数组,您应该能够遍历每个 Movie JSON 对象并将其插入到数据库中。

【讨论】:

谢谢!我已经阅读了有关播种的文档,而这正是我一直在寻找的!【参考方案2】:

要添加到 docaholic 的有用响应,这里有一些步骤/伪代码可能会有所帮助。

假设您使用的是 SQL 数据库并且需要创建模型:

# creates a migration file. 
rails generate migration create_movies title:string #duration_in_minutes:integer or whatever fields you have
# edit the file to add other fields/ensure it has what you want.
rake db:migrate

编写一个脚本来填充您的数据库。这有很多模式(rake 任务、测试装置等),您想要使用哪一种取决于您需要什么(无论是用于测试、用于生产环境、作为新环境的种子数据等)。

但通常代码的样子是:

text_from_file = File.read(file_path)
JSON.parse(text_from_file).each do |json_movie_object|
  Movie.create!(title: json_movie_object[:title], other_attribute: json_movie_object[:other_attribute])
  # if the json attributes exactly match the column names, you can do
  # Movie.create!(json_movie_object)
end

对于大量数据,这不是最高效的选项。对于大文件,您可以使用insert_all 以提高效率,但这会绕过 activerecord 验证和回调,因此您需要了解这意味着什么。

【讨论】:

以上是关于如何使用 json 文件在 ruby​​ on rails 中填充模型(数据库)?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ruby on Rails 中“漂亮”地格式化 JSON 输出

Ruby on Rails 高级 JSON 序列化

Ruby on Rails 生成模型

尝试使用to_json生成嵌套的json格式时,ruby on rails中的未定义方法错误?

在页面上输出外部 JSON Api Ruby on Rails

Ruby on Rails,json vs js ajax 响应