JSON資料看起來像這樣......
{
"data": [
"scores": {
"localteam_score": 3,
"visitorteam_score": 1,
}
"localTeam": {
"data": {
"name": "Atlanta United",
"logo_path": "https://cdn.sportmonks.com/images/soccer/teams/3/323.png",
}
},
"visitorTeam": {
"data": {
"name": "Sporting KC",
"logo_path": "https://cdn.sportmonks.com/images/soccer/teams/3/323.png",
}
},
"lineup": {
"data": [
{
"team_id": 3645,
"fixture_id": 18449920,
"player_id": 393,
"player_name": "Brad Guzan",
"number": 1,
"position": "G",}
對于我保留基本比賽資訊的表格,我用這個...
require 'rest-client'
rest_client = RestClient.get 'https://soccer.sportmonks.com/api/v2.0/fixtures/between/2022-01-01/2022-12-01/3645?api_token=__&include=localTeam,visitorTeam,goals,'
@match = JSON.parse(rest_client)
@match['data'].each do |match|
Match.create(
local_team: match["localTeam"]["data"]["name"],
away_team: match["visitorTeam"]["data"]["name"],
localteam_score: match["scores"]["localteam_score"],
awayteam_score: match["scores"]["visitorteam_score"],
awaylogo: match["visitorTeam"]["data"]["logo_path"],
locallogo: match["localTeam"]["data"]["logo_path"])
end
哪個作業得很好,做了我想做的事。我需要填寫由陣容資料組成的另一個表,該表一直在回傳“nil:Nilclass 的未定義方法 []”和“TypeError:沒有將字串隱式轉換為整數”錯誤。所以,為了測驗,我洗掉了第二個方法并保留了第一個,現在第一個甚至不再作業了,并且給了我“NoMethodError: undefined method `fetch_value' for nil:NilClass”盡管是完全相同的代碼以前作業。
我已經進入 postresql 并確認兩個表都存在并且第一個表已正確填充,但現在,這兩種方法都被破壞了。
完整的種子檔案
require 'json'
require 'dotenv'
require 'rest-client'
require 'open-uri'
Dotenv.load
require 'rest-client'
rest_client = RestClient.get 'https://soccer.sportmonks.com/api/v2.0/fixtures/between/2022-01-01/2022-12-01/3645?api_token=p5o0nolOT4JUo5lYXrBFY8Ess6vuRZJ9Rt5jmOx3DmJjgZpT9ghmfYbZHIdj&include=localTeam,visitorTeam,goals,'
@match = JSON.parse(rest_client)
@match['data'].each do |match|
Match.create(
local_team: match["localTeam"]["data"]["name"],
away_team: match["visitorTeam"]["data"]["name"],
localteam_score: match["scores"]["localteam_score"],
awayteam_score: match["scores"]["visitorteam_score"],
awaylogo: match["visitorTeam"]["data"]["logo_path"],
locallogo: match["localTeam"]["data"]["logo_path"])
end
@match['data'].each do |lineup|
Lineup.create(
display_name: lineup["lineup"]["data"]["player_name"],
number: lineup["lineup"]["data"]["number"],
position: lineup["lineup"]["data"]["position"],
)
end
完整的錯誤資訊
$ rails db:seed
rails aborted!
NoMethodError: undefined method `fetch_value' for nil:NilClass
/home/ubuntu/environment/rated_app/db/seeds.rb:20:in `block in <main>'
/home/ubuntu/environment/rated_app/db/seeds.rb:19:in `each'
/home/ubuntu/environment/rated_app/db/seeds.rb:19:in `<main>'
/home/ubuntu/environment/rated_app/bin/rails:5:in `<top (required)>'
/home/ubuntu/environment/rated_app/bin/spring:10:in `require'
/home/ubuntu/environment/rated_app/bin/spring:10:in `block in <top (required)>'
/home/ubuntu/environment/rated_app/bin/spring:7:in `tap'
/home/ubuntu/environment/rated_app/bin/spring:7:in `<top (required)>'
Caused by:
NoMethodError: undefined method `fetch_value' for nil:NilClass
/home/ubuntu/environment/rated_app/db/seeds.rb:20:in `block in <main>'
/home/ubuntu/environment/rated_app/db/seeds.rb:19:in `each'
/home/ubuntu/environment/rated_app/db/seeds.rb:19:in `<main>'
/home/ubuntu/environment/rated_app/bin/rails:5:in `<top (required)>'
/home/ubuntu/environment/rated_app/bin/spring:10:in `require'
/home/ubuntu/environment/rated_app/bin/spring:10:in `block in <top (required)>'
/home/ubuntu/environment/rated_app/bin/spring:7:in `tap'
/home/ubuntu/environment/rated_app/bin/spring:7:in `<top (required)>'
Tasks: TOP => db:seed
(See full trace by running task with --trace)
我哪里錯了?
uj5u.com熱心網友回復:
這"lineup": { "data": [ { "team_id": 3645, "fixture_id": 18449920, "player_id": 393, "player_name": "Brad Guzan", "number": 1, "position": "G",}
是一個散列,其中包含鍵“資料”中的陣列。請使用資料運行回圈并填充陣容表。喜歡
@match['data'].each do |lineup|
lineup['data'].each do |l|
Lineup.create(
display_name: lineup["lineup"]["data"]["player_name"],
number: lineup["lineup"]["data"]["number"],
position: lineup["lineup"]["data"]["position"],
)
end
end
uj5u.com熱心網友回復:
您的 Lineup.create 在這一行的末尾有一個額外的逗號:
position: lineup["data"]["position"],
uj5u.com熱心網友回復:
我哪里錯了?
您沒有仔細閱讀錯誤訊息,您沒有使用除錯工具,您沒有在 StackOverflow 上分享完整的錯誤訊息,并且您沒有向 StackOverlow 分享可重現的代碼示例(您只分享了部分/不完整的 JSON 資料,我不知道在哪里fetch_value定義/呼叫了這個方法)。
第一個錯誤:
undefined method [] for nil:Nilclass
表示某事是nil。是什么nil?我不知道,因為你沒有分享細節。閱讀錯誤資訊的行號,它會告訴你哪個變數是nil.
例如,也許(??) 錯誤來自:match["time"]["starting_at"]["date"],因為match["time"]["starting_at"]是nil? 也許解決方法是替換"starting_at"為"startingAt"?!或者這個欄位有時可能會丟失,所以你的代碼需要優雅地處理它——例如match.dig("time", "starting_at", "date")?
或者,也許@lineup實際上給了你一組完全不同的資料,比如{ "error": { "message": "Unauthenticated", "code": 403 } },所以解決方案是優雅地處理無效的回應狀態?
沒有更多資訊,我只能推測可能的原因和解決方案。
您還可以使用除錯工具byebug來幫助診斷變數,而不是依賴重新運行代碼和/或使用puts陳述句來查看發生了什么。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/443529.html
上一篇:簡單的SQL查詢示例
