【问题标题】:How to populate a DB using and JSON file in rails如何在 Rails 中使用 JSON 文件填充数据库
【发布时间】:2020-11-17 03:37:48
【问题描述】:

所以,在问之前,我必须说我对网络编程完全陌生。我在 2 天前开始学习,我唯一的编程经验是 C 语言。我正在尝试通过一些练习来学习 ruby​​ on rails。这意味着我对语法几乎一无所知,但我正在一点一点地了解它。

因此,当前的练习是:获取从网站 API 获得的 JSON 文件,并将其数据存储在模型中,然后我必须将其显示在表格上。

因为我有 C 经验,所以我将这个问题理解为 1. 创建一个新结构,2. 为这个结构创建一个向量,3. 从文件中读取数据并将其存储在这个向量中,4.printing数据。所有这些都是通过在单个 .c 文件中编写代码行然后在我的终端中运行来完成的。

但是对于 Rails 语言,事情似乎并不能以这种方式工作。我读过一些有类似问题的代码,但我不太确定在哪里写它们。我的意思是,在哪些文件/目录中?因为在 C 中我们没有多个文件和文件夹这样的东西(我们只写一个单页程序)。我有点迷路了。

如果有人可以提供一些一般步骤的帮助,例如在哪里/为什么/写什么,我将非常感激!没有必要完全具体,只是一些整体的想法会很棒

【问题讨论】:

    标签: ruby-on-rails json database api migrating


    【解决方案1】:

    假设您已获得一个 JSON 文件,其中包含一个 JSON 对象,并且您已将其从文件中读取到内存中。您的问题没有说明这是否已经是一个问题,所以我假设您可以进行这种转换(文件中的字符串到活动对象)。如果没有,看看这个:Serialize Ruby object to JSON and back?

    接下来要做的是把它变成内存中的 ActiveRecord 对象。假设 json 对象只包含对相关模型有效的键/值对,您可以像这样简单地做到这一点:

    ar_object = MyModel.new(json_object.to_hash)
    

    然后,将其保存到数据库中(这需要一个与您的 AR 模型相对应的数据库表,并且对于您的 json 对象中的每个键都有一个正确的列:

    ar_object.save
    

    然后,当浏览器调用 AR 模型的索引页面时,例如http://localhost:3000/my_models.html,使用控制器的 index 方法从数据库中获取模型的所有实例:

    class MyModelsController < ApplicationController
    
       def index
         @objects = MyModell.all
         # rails will render /app/views/my_models/index.html.erb by default
       end
    
    end
    

    然后在 app/views/my_models/index.html.erb:

    <table>
       <thead>
         <tr>
           <th>Col 1 name</th>
           <th>Col 2 name</th>
         </tr>
       </thead>
       <tbody>
         <% for object in @objects do %>
           <tr>
             <td><%= object.col_1 %>
             <td><%= object.col_2 %>
           </tr>
         <% end %>
       </tbody>
     </table>
    

    HTML 当然可能看起来不同,这取决于您的模型属性和您喜欢的模板引擎(看看 haml)。

    【讨论】:

    • 非常感谢,这绝对有帮助。我将遵循这些一般步骤,并希望完成我的小项目。非常感谢您的时间和耐心!
    猜你喜欢
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 2014-05-05
    • 2016-01-01
    相关资源
    最近更新 更多