如何使用 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 输出
尝试使用to_json生成嵌套的json格式时,ruby on rails中的未定义方法错误?