【发布时间】:2021-10-20 12:34:00
【问题描述】:
我有一个 json 文件,里面有很多电影。我想创建一个模型“电影”并用该 json 文件中的所有电影填充它。我该怎么做?我知道我可以将 json 文件解析为哈希,但这不是我要找的东西。
【问题讨论】:
标签: ruby-on-rails json ruby database model
我有一个 json 文件,里面有很多电影。我想创建一个模型“电影”并用该 json 文件中的所有电影填充它。我该怎么做?我知道我可以将 json 文件解析为哈希,但这不是我要找的东西。
【问题讨论】:
标签: ruby-on-rails json ruby database model
您要查找的正确术语是“播种”!
但是,您将需要一个数据库,以及一个迁移来创建数据库以及关联的movies 表。 (有很多关于如何做到这一点的指南,以及官方documentation)。
完成后,您需要使用 json 文件中的数据“播种”数据库。
在 seeds.rb 文件中,假设 JSON 文件是 JSON 格式的 Movies 数组,您应该能够遍历每个 Movie JSON 对象并将其插入到数据库中。
【讨论】:
要添加到 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 验证和回调,因此您需要了解这意味着什么。
【讨论】: