Ruby {}为什么不向字符串中添加值?
我正在使用httparty向以下用户发出GET请求: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:
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。他们将为您处理直接注入字符串无法解决的编码问题。谢谢你们两位的建议。