Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby {}为什么不向字符串中添加值?_Ruby_Httparty - Fatal编程技术网

Ruby {}为什么不向字符串中添加值?

Ruby {}为什么不向字符串中添加值?,ruby,httparty,Ruby,Httparty,我正在使用httparty向以下用户发出GET请求: https://api.marktplaats.nl/api3/categories.json?oauth_token=1me6jq76h8t6rim747m7bketkd&api_ver=3.7&session=ebc565b8-659f-40f6-9d0a-96986f1d1595&screenWidth=62&screenHeight=111&app_ver=Android3.1.0 代码A:

我正在使用httparty向以下用户发出GET请求:

https://api.marktplaats.nl/api3/categories.json?oauth_token=1me6jq76h8t6rim747m7bketkd&api_ver=3.7&session=ebc565b8-659f-40f6-9d0a-96986f1d1595&screenWidth=62&screenHeight=111&app_ver=Android3.1.0
代码A:

require 'httparty'

class Marktplaats  
  def categories
    HTTParty.get('https://api.marktplaats.nl/api3/categories.json?oauth_token=1me6jq76h8t6rim747m7bketkd&api_ver=3.7&session=ebc565b8-659f-40f6-9d0a-96986f1d1595&screenWidth=62&screenHeight=111&app_ver=Android3.1.0')
  end
end
代码B:

require 'httparty'

class Marktplaats
  @oauth_token = '1me6jq76h8t6rim747m7bketkd'

  def categories
    HTTParty.get("https://api.marktplaats.nl/api3/categories.json?oauth_token=#{@oauth_token}&api_ver=3.7&session=ebc565b8-659f-40f6-9d0a-96986f1d1595&screenWidth=62&screenHeight=111&app_ver=Android3.1.0")
  end
end
执行以下操作时:

m = Marktplaats.new
m.categories
代码A有效,但代码B无效

在代码B的GET调用中调用.request.last_uri.to_s返回:

https://api.marktplaats.nl/api3/categories.json?oauth_token=&api_ver=3.7&session=ebc565b8-659f-40f6-9d0a-96986f1d1595&screenWidth=62&screenHeight=111&app_ver=Android3.1.0

可能出现什么问题?

您正在创建一个类实例变量,但在方法中使用了一个局部实例变量。改为这样做:

require 'httparty'

class Marktplaats
  OAUTH_TOKEN= '1me6jq76h8t6rim747m7bketkd'

  def categories
    HTTParty.get("https://api.marktplaats.nl/api3/categories.json?oauth_token=#{OAUTH_TOKEN}&api_ver=3.7&session=ebc565b8-659f-40f6-9d0a-96986f1d1595&screenWidth=62&screenHeight=111&app_ver=Android3.1.0")
  end
end

这是在类级别和实例级别定义变量的情况。您已经在类级别定义了@oauth_标记,但试图在实例级别使用它,但无法。尝试将代码更改为:

class Marktplaats
  def initialize
    @oauth_token = '1me6jq76h8t6rim747m7bketkd'
  end

  def categories
    HTTParty.get("https://api.marktplaats.nl/api3/categories.json?oauth_token=#{@oauth_token}&api_ver=3.7&session=ebc565b8-659f-40f6-9d0a-96986f1d1595&screenWidth=62&screenHeight=111&app_ver=Android3.1.0")
  end
end
或者使用在类和实例级别都可以访问但永远不会更改的常量:

class Marktplaats
  OAUTH_TOKEN = '1me6jq76h8t6rim747m7bketkd'

  def categories
    HTTParty.get("https://api.marktplaats.nl/api3/categories.json?oauth_token=#{OAUTH_TOKEN}&api_ver=3.7&session=ebc565b8-659f-40f6-9d0a-96986f1d1595&screenWidth=62&screenHeight=111&app_ver=Android3.1.0")
  end
end

这不是一个类变量。它是类对象中的一个实例变量。一个微妙但重要的区别。我的建议是使用常量,如果值不随实例而变化……养成使用内置模块的习惯,或者操纵URL。他们将为您处理直接注入字符串无法解决的编码问题。谢谢你们两位的建议。