Ruby on rails 如何从json响应创建对象数组
我得到这个错误: [id,6309]:数组的未定义方法“name” 我想在播放事件中显示每个响应的联盟名称 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
{
"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 %>