Ruby on rails 如何从json响应创建对象数组

Ruby on rails 如何从json响应创建对象数组,ruby-on-rails,json,ruby,ruby-on-rails-5,Ruby On Rails,Json,Ruby,Ruby On Rails 5,我得到这个错误: [id,6309]:数组的未定义方法“name” 我想在播放事件中显示每个响应的联盟名称 Json响应: { "success": 1, "pager": { "page": 1, "per_page": 50, "total": 21 }, "results": [ { "id": "222434", "time": "1489669

我得到这个错误:

[id,6309]:数组的未定义方法“name”

我想在播放事件中显示每个响应的联盟名称

Json响应:

{
    "success": 1,
    "pager": {
        "page": 1,
        "per_page": 50,
        "total": 21
    },
    "results": [
        {
            "id": "222434",
            "time": "1489669200",
            "time_status": "1",
            "league": {
                "id": "4148",
                "name": "Viareggio Cup",
                "cc": null
            },
            "home": {
                "id": "43717",
                "name": "Fiorentina U19",
                "image_id": "42466",
                "cc": "it"
            },
            "away": {
                "id": "159690",
                "name": "Garden City Panthers FC U19",
                "image_id": "320141",
                "cc": null
            },
            "timer": {
                "tm": 86,
                "ts": 4,
                "tt": "1"
            },
            "scores": {
                "2": {
                    "home": "2",
                    "away": "0"
                }
            }
        },
        {
            "id": "223265",
            "time": "1489669200",
            "time_status": "1",
            "league": {
                "id": "1501",
                "name": "Uganda Division 2",
                "cc": "ug"
            },
            "home": {
                "id": "159745",
                "name": "Simba FC",
                "image_id": null,
                "cc": null
            },
            "away": {
                "id": "80323",
                "name": "Busia Fisheries",
                "image_id": null,
                "cc": null
            },
            "timer": {
                "tm": 69,
                "ts": 1,
                "tt": "1"
            },
            "scores": {
                "2": {
                    "home": "1",
                    "away": "2"
                }
            }
        },
    ]
}
联盟模式

module Bapi
  class League < Base
    attr_accessor :id,
                  :name,
                  :cc
  end
end
观点:

<% @events.each_slice(3) do |events| %>
    <% events.each do |event| %>
     <% event.league.each do |leg| %>
            <%= leg.name %>      
     <% end %>
    <% end %>
  <% end %>
 <% end %>
当我像这样修改代码时,它工作得很好

编辑: 我找到了这个 现在我如何定义一个变量来将参数转换为键值,当我使用key作为其返回值时

    <% @events.each_slice(3) do |events| %>
        <% events.each do |event| %>
     <% event.league.each do |k,v| %>
            <%= k %> <br>
            <%= v %>         
       <% end %>      
    <% end %>
  <% end %>
 <% end %>

我想问题在于这种方法:

def initialize(args = {})
  super(args)
  league = parse_leagues(args)
end
分析联盟并将其设置为局部变量,但应将其设置为实例变量:

def initialize(args = {})
  super(args)
  @league = parse_leagues(args)
end
否则,将调用Base的默认实现,并将@league设置为散列的原始值

此外,parse_leagues方法应该是固定的,并且可能重命名为parse_leagues,因为原始值不是数组,而是散列:

def parse_leagues(args = {})
  League.new(args.fetch("league", {}))
end
然后在视图中使用它,如下所示:

<% @events.each_slice(3) do |events| %>
  <% events.each do |event| %>
    <%= event.league.name %>    
  <% end %>
<% end %>

它的反应false@Gasem你能详细说明一下吗?当我使用@league初始化它的返回时,在视图中没有任何错误,当我使用它的返回时false@Gasem更新了我的答案,我没有注意到,联盟的原始价值是一个散列,而不是一个数组,它有帮助,但仍然不起作用,当使用@league时,返回此错误未定义的方法“each”,因为如果您可以生成一个较小的代码示例来重现问题,它可能会有所帮助。
    <% @events.each_slice(3) do |events| %>
        <% events.each do |event| %>
     <% event.league.each do |k,v| %>
            <%= k %> <br>
            <%= v %>         
       <% end %>      
    <% end %>
  <% end %>
 <% end %>
def initialize(args = {})
  super(args)
  league = parse_leagues(args)
end
def initialize(args = {})
  super(args)
  @league = parse_leagues(args)
end
def parse_leagues(args = {})
  League.new(args.fetch("league", {}))
end
<% @events.each_slice(3) do |events| %>
  <% events.each do |event| %>
    <%= event.league.name %>    
  <% end %>
<% end %>