繁体   English   中英

如何在Ruby on Rails中根据API响应创建对象数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM