我正在关注this tutorial以连接到GitHub API。我可以成功连接并恢复当前已验证的用户信息。
但是我试图找回用户的仓库,响应是一个对象数组。
我不知道如何将其传递给视图。在我所关注的教程中,请查看recipe.rb
类here。
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 %>
答案 0 :(得分:1)
您需要实现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
答案 1 :(得分:0)
啊,我的实现是正确的,但是我需要像这样访问repos
属性
<% @repos.repos.each do |repo|%>
<%= repo.name %>
<% end %>
我不知道为什么我以前没看到这个,我想我很沮丧