rake db:seed 无法在 Ruby CLI 应用程序中从 API 播种 - 将播种手动写入的数据 - Ruby/ActiveRecord

rake db:seed not working to seed from API in Ruby CLI app - will seed manually written data - Ruby/ActiveRecord

我正在尝试使用来自 API 的种子数据来改进学校(超级初学者)的项目,以使用 Ruby 和 ActiveRecord 制作 CLI 应用程序,否 Rails.我不得不通过获取数据(对象 ID 的散列)来对数据进行 "cheat" 排序,将该 ID 附加到另一个 URL link 的末尾(创建这些 links) 然后遍历每一个并发出 GET 请求,将其放入最终哈希中,我从中迭代并播种到我的数据库中。

我曾经成功过一次 - 但我想扩展数据集,所以我清除了数据库并重新播种,但它不再有效。它挂了很长时间,然后似乎完成了,但数据不存在。我在我的代码中所做的唯一更改是 URL,但即使我将其改回它也不再有效。但是,它确实为我手动编写的任何内容提供了种子。 URL 在我的浏览器中运行良好。我尝试了 rake:db:migrate:reset,但这似乎对我不起作用。

如果我的代码有点混乱,我深表歉意,我只是想弄清这个问题的真相,这是我第一次使用 APIs / 创建这样的项目。我感谢任何帮助。谢谢!

response = RestClient.get("https://collectionapi.metmuseum.org/public/collection/v1/search?departmentId=11&15&19&21&6q=*")

metData = JSON.parse(response)
url = "https://collectionapi.metmuseum.org/public/collection/v1/objects/"
urlArray = []
metData["objectIDs"].each do |e|
urlArray.push(url.to_s + e.to_s)
end
# urlArray.slice!(0,2)
urlArray
end

object_id_joiner

def finalHash
    finalHash =[]
    object_id_joiner.each do |e|
    response = RestClient.get(e)
    data = JSON.parse(response)
    finalHash.push(data)
    end
    finalHash

end

finalHash

 finalHash.each do |artist_hash|
    if artist_hash["artistDisplayName"] == nil
         next
    end

    if (!artist_hash["artistDisplayName"])
    art1 = Artist.create(artist_name:artist_hash["artistDisplayName"]) 
    else 
    next
    end 
    if (!artist_hash["objectID"])
    Artwork.create(title: artist_hash["title"],image: artist_hash["primaryImage"], department: artist_hash["department"], artist: art1, object_id: artist_hash["objectID"])
    else
        next
    end
end

如评论中所述,您的代码中有一些恶意 !。 这是上一个循环的更简单版本。

finalHash.each do |artist_hash|
 next if artist_hash["artistDisplayName"] == nil

 # Now you don't need conditional for artistDisplayName
 art1 = Artist.create(artist_name: artist_hash["artistDisplayName"]) 

 # Now create artwork if you HAVE objectID
 if (artist_hash["objectID"])
    Artwork.create(title: artist_hash["title"],image: artist_hash["primaryImage"], department: artist_hash["department"], artist: art1, object_id: artist_hash["objectID"])
 end
end