没有服务器响应

时间:2014-06-15 06:10:03

标签: ruby-on-rails ruby-on-rails-4 nokogiri strong-parameters

我真的无法找到解决方案。我试图访问游戏API以填充我手动插入的游戏的平台(PS3 Xbox)信息。关于我所拥有的游戏的所有信息(比如游戏的名称)都是强有力的参数。所以我使用我手动插入的名称来使用API​​获取平台。

当我尝试第一个例子时,事情很顺利,但第二个例子,我没有得到服务器的回答。当我提交到create action时没有任何反应,而不是服务器日志上的一行: - /

示例之间的唯一区别是我保存游戏名称以进行API请求的方式。我使用Nokogiri Gem来解析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

1 个答案:

答案 0 :(得分:0)

总之,区别在于:

firstUrl = "http://thegamesdb.net/api/GetGamesList.php?name=" + @game.name.gsub(/\s+/, "")

您将在此处获得有关如何debug此问题的提示。问题是因为您正在ping第三方API,我们几乎没有关于返回的数据意味着什么的信息,制作任何"解决方案"一个在黑暗中刺伤的案例

-

<强>调试

我会做几件事:

  
      
  1. 确保此新链接可访问&amp;返回数据
  2.   
  3. 确保其余变量&amp;数据完好无损
  4.   
  5. 确保第三方API能够提供您想要的回报
  6.   

我怀疑问题与您拨打@game.name.gsub的方式有关 - 您确认这确实被称为吗?

我刚测试了网址http://thegamesdb.net/api/GetGamesList.php?name=StarFox并带回了数据。在初步检查时,我怀疑问题的症结在于你对此url

的召唤