[英]no implicit conversion of String into Integer error in ruby on rails
我想從我的 rails 視圖中訪問1_1
1_2
1_3
每一個,現在我如何在我的Odd
類中定義每個來訪問它們? 我得到這個錯誤no implicit conversion of String into Integer
在這一行Odd.new(args.fetch("1_1", {}))
no implicit conversion of String into Integer
Odd.new(args.fetch("1_1", {}))
傑森回應:
{
"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) }
你是說讓我得到響應的所有“結果”,它們是
{
"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"}]])
但是這個方法需要一個哈希值。
當您對 Array 調用 .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 元素數組轉換回散列,這是你稍后在代碼中所期望的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.