[英]How to create an array of objects from API response in Ruby on Rails
我正在按照本教程连接到GitHub API。 我可以成功连接并恢复当前已验证的用户信息。
但是我试图找回用户的仓库,响应是一个对象数组。
我不知道如何将其传递给视图。 在我关注的教程中,请在此处查看recipe.rb
类。
attr_accessor :ingrediets
将用作数组(第8行)。 在第32行中,她将响应从API传递到自定义方法以对其进行解析,创建Ingredient
对象并将其推入数组。 self.ingredients = parse_ingredients(args)
这是自定义方法
def parse_ingredients(args = {})
args.fetch("extendedIngredients", []).map { |ingredient| Ingredient.new(ingredient) }
end
如您所见,她正在从args
对象中获取响应中的extendedIngredients
属性并创建数组。
我的问题是,使用GitHub API时,响应是一个纯数组,而我尝试解析它并将其转换为对象数组的尝试均未成功。
这是我的repos.rb
类
module Github
class Repos < Base
attr_accessor :repos
def initialize(args = [])
self.repos = parse_repos(args)
end
def self.list
response = Request.get("user/repos")
Repos.new(response)
end
private
def parse_repos(args = [])
args.map { |repo| Repo.new(repo) }
end
end
end
还有我的repo.rb
类
module Github
class Repo < Base
attr_accessor :name,:full_name,:description
end
end
如果您注意到我遵循了本教程的风格,但是我无法实现它。
在我当前的实现中,这是我认为的错误
undefined method `each' for #<Github::Repos:0x00007feaadd494d8>
<% @repos.each do |repo|%>
<%= repo %>
<% end %>
您需要实现each
错误,因为错误提示请阅读Enumerable
第一段。
通常,您可以将其传递给已经可枚举的对象(例如您的Array
)。
例如
module Github
class Repos < Base
include Enumerable
def self.list
response = Request.get("user/repos")
Repos.new(response)
end
def initialize(args = [])
@repos = parse_repos(args)
end
def each(&block)
@repos.each(&block)
end
private
def parse_repos(args = [])
args.map { |repo| Repo.new(repo) }
end
end
end
嗯,我的实现是正确的,但是我需要像这样访问repos
属性
<% @repos.repos.each do |repo|%>
<%= repo.name %>
<% end %>
我不知道为什么我以前没看到这个,我觉得我很沮丧
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.