我想用api中的數據填充我的數據庫表。我有參與,並建立了三個模型,如下圖所示:使用外部API請求數據填充rails數據庫
class Fixture < ActiveRecord::Base
belongs_to :homeTeam, class_name: "Team", foreign_key: "homeTeam_id"
belongs_to :awayTeam, class_name: "Team", foreign_key: "awayTeam_id"
belongs_to :league
validates :matchday, presence: true
validate :opposing_teams_must_be_different
#validates :externalFixtureID, :date, :matchday, :awayTeam, :homeTeam , :goalsHomeTeam, :goalsAwayTeam, presence: true
def teams
[homeTeam, awayTeam]
end
def opposing_teams_must_be_different
errors.add(:awayTeam, "must be different from Home team") if awayTeam_id == homeTeam_id
end
class Team < ActiveRecord::Base
belongs_to :league
has_many :fixtures
end
class League < ActiveRecord::Base
has_many :teams
has_many :fixtures
end
來填充數據庫,並確保我獲得了聯賽和球隊賽程,我用燈具模型下面的代碼:
def self.query_fixtures
uri = URI.parse("http://api.football-data.org")
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Get.new("/alpha/soccerseasons/354/fixtures")
response = http.request(request)
parsed_matches = JSON.parse(response.body)["fixtures"]
parsed_matches.each do |key, val|
@league = League.find(5)
@teams = @league.teams.each do |t|
if key["homeTeamName"] = t.name
homeTeam_id = t.id
elsif key["awayTeamName"] = t.name
awayTeam_id = t.id
end
@fixture = @league.fixtures.create!(:gameDate => key["date"], :matchday => key["matchday"], :awayTeam_id => awayTeam_id,
:homeTeam_id => homeTeam_id, :goalsHomeTeam => key["result"]["goalsHomeTeam"],
:goalsAwayTeam => key["result"]["goalsAwayTeam"])
end
end
end
但是,當我在rails控制檯中運行代碼時,數據庫會被填充,但awayTeam_id仍然爲空/空。我怎樣才能確保我已經填入awayTeam_id和homeTeam_id?團隊的名字和我從api得到的是一樣的。我設置了awayTeam_id和homeTeam_id基於homeTeamName = team.name和awayTeamName = team.name(請參閱query_fixtures方法中的循環)任何幫助,將不勝感激。
不要採取這個人,但我投票結束這個問題,因爲雖然這是一個好問的問題,解決方案是非常特殊的問題,並不會廣泛適用於其他人。 – smathy