簡體   English   中英

在 ruby​​ on rails 中沒有將字符串隱式轉換為整數錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM