我真的找不到解决方案。我正在尝试访问游戏API,以填充我手动插入的游戏的平台(PS3 Xbox(信息。我所拥有的关于游戏的所有信息(比如游戏名称(都在强参数中。所以我使用我手动插入的名称来获得使用API的平台。
当我尝试第一个例子时,一切都很好,但在第二个例子中,我没有从服务器得到答案。当我提交到创建操作时,没有发生任何事情,服务器日志上没有一行:-/
示例之间唯一的区别是我保存游戏名称以发出API请求的方式。我正在使用NokogiriGem来解析API的XML,代码对我来说很好
你能帮我吗?
谢谢,
示例1(效果良好(:
def create
@game = Game.new(game_params)
firstUrl = "http://thegamesdb.net/api/GetGamesList.php?name=sonic"
# I'm hardcoding a game just for debug
gameList = Nokogiri::XML(open(firstUrl))
gameApiId = gameList.css("Game id").first.text
secondUrl = "http://thegamesdb.net/api/GetGame.php?id=" + gameApiId
gameInformation = Nokogiri::XML(open(secondUrl))
@game.platform = gameInformation.xpath("//Game//Platform").text
if @game.save
redirect_to @game, notice: 'Game was successfully created.'
else
render :new
end
end
private
def game_params
params.require(:game).permit(:name, :publisher, :year, :description, :image, levels_attributes: [:id, :name, :sort_order, :_destroy])
end
示例2(服务器没有响应(
def create
@game = Game.new(game_params)
firstUrl = "http://thegamesdb.net/api/GetGamesList.php?name=" + @game.name.gsub(/s+/, "")
# I'm hardcoding a game just for debug
gameList = Nokogiri::XML(open(firstUrl))
gameApiId = gameList.css("Game id").first.text
secondUrl = "http://thegamesdb.net/api/GetGame.php?id=" + gameApiId
gameInformation = Nokogiri::XML(open(secondUrl))
@game.platform = gameInformation.xpath("//Game//Platform").text
if @game.save
redirect_to @game, notice: 'Game was successfully created.'
else
render :new
end
end
private
def game_params
params.require(:game).permit(:name, :publisher, :year, :description, :image, levels_attributes: [:id, :name, :sort_order, :_destroy])
end
总之,区别在于:
firstUrl = "http://thegamesdb.net/api/GetGamesList.php?name=" + @game.name.gsub(/s+/, "")
你将在这里获得关于如何debug
这个问题的提示。问题是,由于您正在ping第三方API,我们对返回数据的含义知之甚少,这使得任何"解决方案"都成为在黑暗中刺破的情况
--
调试
我会做几件事:
- 请确保此新链接是可访问的&返回数据
- 确保其余的变量&数据完好无损
- 确保第三方API能够提供您想要的退货
我怀疑问题将与您呼叫@game.name.gsub
-的方式有关。您是否确认这确实被呼叫?
我刚刚测试了url http://thegamesdb.net/api/GetGamesList.php?name=StarFox
,它带回了数据。经过初步检查,我怀疑问题的关键在于您调用此url