我想从我的rails视图访问1_1
1_2
1_3
的每一个,
现在,如何在我的Odd
类中定义每个元素来访问它们?
我在此行no implicit conversion of String into Integer
Odd.new(args.fetch("1_1", {}))
Json回复:
{
"success": 1,
"results": {
"1_1": [
{
"id": "1976855",
"home_od": "501.000",
"draw_od": "17.000",
"away_od": "1.025",
"ss": "0:1",
"time_str": "91",
"add_time": "1480296195"
}
],
"1_2": [
{
"id": "1976855",
"home_od": "501.000",
"draw_od": "17.000",
"away_od": "1.025",
"ss": "0:1",
"time_str": "91",
"add_time": "1480296195"
}
],
"1_3": [
{
"id": "1976855",
"home_od": "501.000",
"draw_od": "17.000",
"away_od": "1.025",
"ss": "0:1",
"time_str": "91",
"add_time": "1480296195"
}
]
}
}
奇数模型
module Bapi
class Odd < Base
attr_accessor :event_id,
:full_time
CACHE_DEFAULTS = { expires_in: 7.day, force: false }
def self.find(query = {})
cache = CACHE_DEFAULTS
response = Request.where("/v1/event/odds",CACHE_DEFAULTS, query)
inplaies = response.fetch('results',[]).map { |odd| Odd.new(odd) }
inplaies
end
def initialize(args = {})
super(args)
self.full_time = parse_1x2(args)
end
def parse_1x2(args = {})
Odd.new(args.fetch("1_1", {}))
end
end
end
答案 0 :(得分:0)
这样做的时候
inplaies = response.fetch('results',[]).map { |odd| Odd.new(odd) }
您说的是让我获得所有“回应”结果
{
"1_1": [{}],
"1_2": [{}],
}
到目前为止,一切都很好。然后,您可以对此调用.map。调用.map时,它将哈希表的每个元素转换为2元素数组,其中第一个元素为键,第二个元素为值。因此,您的变量“奇数”现在看起来像这样:
["1_1", [{"id"=>"1976855", "home_od"=>"501.000", "draw_od"=>"17.000", "away_od"=>"1.025", "ss"=>"0:1", "time_str"=>"91", "add_time"=>"1480296195"}]]
["1_2", [{"id"=>"1976855", "home_od"=>"501.000", "draw_od"=>"17.000", "away_od"=>"1.025", "ss"=>"0:1", "time_str"=>"91", "add_time"=>"1480296195"}]]
["1_3", [{"id"=>"1976855", "home_od"=>"501.000", "draw_od"=>"17.000", "away_od"=>"1.025", "ss"=>"0:1", "time_str"=>"91", "add_time"=>"1480296195"}]]
然后将每个数组元素传递给Odd.new,这样您就可以有效地进行操作:
Odd.new(["1_1", [{"id"=>"1976855", "home_od"=>"501.000", "draw_od"=>"17.000", "away_od"=>"1.025", "ss"=>"0:1", "time_str"=>"91", "add_time"=>"1480296195"}]])
正如我在评论中提到的那样,您的Odd初始化程序需要一个哈希,但是您正在提供此Array。
最后它调用
parse_1x2(args)
与您的论据是
parse_1x2(["1_1", [{"id"=>"1976855", "home_od"=>"501.000", "draw_od"=>"17.000", "away_od"=>"1.025", "ss"=>"0:1", "time_str"=>"91", "add_time"=>"1480296195"}]])
但是此方法需要哈希。
在数组上调用.fetch时,它希望您提供一个数字索引。但是,您正在调用.fetch并使用字符串“ 1_1”,因为您希望“ args”在那里是一个哈希。
您可以通过启动Rails控制台并执行以下操作来查看此操作:
[1,2,3].fetch(0) # will work
[1,2,3].fetch("some string key") # will fail with the same error you're getting
您要在这里开始运行的方法是将2元素数组再次转换为哈希:
更改
inplaies = response.fetch('results',[]).map { |odd| Odd.new(odd) }
收件人
inplaies = response.fetch('results',[]).map { |odd| Odd.new([odd].to_h) }
通过此操作,您可以将2元素数组转换回哈希,这是您稍后在代码中所期望的。