rails 上的 ruby 中没有将字符串隐式转换为整数错误
no implicit conversion of String into Integer error in ruby on rails
我想从我的 rails 视图中访问每个 1_1
1_2
1_3
,
现在我如何在我的 Odd
class 中定义每一个来访问它们?
我在这一行 Odd.new(args.fetch("1_1", {}))
上收到此错误 no implicit conversion of String into Integer
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
当你这样做时
inplaies = response.fetch('results',[]).map { |odd| Odd.new(odd) }
你是说给我所有 'results' 的回复,即
{
"1_1": [{}],
"1_2": [{}],
}
到目前为止一切顺利。然后你就此调用 .map。当您调用 .map 时,它将该散列的每个元素转换为一个 2 元素数组,第一个元素作为键,第二个元素作为值。所以你的变量 'odd' 现在看起来像这样:
["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 初始化程序需要一个散列,但您提供的是这个数组。
它终于调用了
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 时,它希望您提供数字索引。但是您使用“1_1”调用 .fetch,它是一个字符串,因为您希望 "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 元素数组转换回哈希,这正是您稍后在代码中所期望的。
我想从我的 rails 视图中访问每个 1_1
1_2
1_3
,
现在我如何在我的 Odd
class 中定义每一个来访问它们?
我在这一行 Odd.new(args.fetch("1_1", {}))
no implicit conversion of String into Integer
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
当你这样做时
inplaies = response.fetch('results',[]).map { |odd| Odd.new(odd) }
你是说给我所有 'results' 的回复,即
{
"1_1": [{}],
"1_2": [{}],
}
到目前为止一切顺利。然后你就此调用 .map。当您调用 .map 时,它将该散列的每个元素转换为一个 2 元素数组,第一个元素作为键,第二个元素作为值。所以你的变量 'odd' 现在看起来像这样:
["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 初始化程序需要一个散列,但您提供的是这个数组。
它终于调用了
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 时,它希望您提供数字索引。但是您使用“1_1”调用 .fetch,它是一个字符串,因为您希望 "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 元素数组转换回哈希,这正是您稍后在代码中所期望的。