繁体   English   中英

Ruby on Rails:如何为请求标头创建带引号的字符串?

[英]Ruby on Rails: How may create a quoted string to a request header?

我正在从头开始编写Twitter客户端,但前提之一是使用Twitter gems,因此必须创建自己的请求。

Twitter API文档在这里说,我必须具有这样的Authorization标头:

Authorization:
OAuth oauth_consumer_key="xvz1evFS4wEEPTGEFPHBog",
oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg",
oauth_signature="tnnArxj06cWHq44gCs1OSKk%2FjLY%3D",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="1318622958",
oauth_token="370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb",
oauth_version="1.0"

如您所见,我必须使用类似oauth_consumer_key="xvz1evFS4wEEPTGEFPHBog" ,并将第二部分用引号引起来。 我尝试使用像

["oauth_consumer_key",%Q( Figaro.env.TWITTER_ACCESS_TOKEN )].join('=')

假设%Q将返回带引号的字符串。 但是当我检查价值时,我得到的只是

oauth_consumer_key=xvz1evFS4wEEPTGEFPHBog

显然,这与所需结果不同。

我想念什么?

%Q(x)与“ x”基本相同。

为了获得所需的结果,您必须手动将引号引入%Q表达式中,例如: %Q("#{Figaro.env.TWITTER_ACCESS_TOKEN}")

1.我的解决方案:

'oauth_consumer_key="#{Figaro.env.TWITTER_ACCESS_TOKEN}"'

2.为什么:

%Q()基本上用双引号""替换变量,这实际上与您编写"Figaro.env.TWITTER_ACCESS_TOKEN"

实际上,要显示变量的内容 ,必须使用"#{var}"使用插值法而不是名称本身。

您也可以将%Q直接用于%Q{var}插值(注意{}代替() )。

您的问题在其他地方:使用join()方法。 它消除了双引号。 在那种情况下,执行["var", var].join('=')["var", %Q{var}].join('=')会做完全相同的事情,但是更加复杂。

@Artem Ignatiev的解决方案应该有效 但是,如果您需要更具可读性,甚至不需要加入,恕我直言,仅当您使用两个以上的变量时,它才有意义。

例如,我将使用诸如'oauth_consumer_key="#{var}"'混合单引号和双引号来确保不会引起混淆。

如果确实需要使用%Q()join ,则仍然可以使用["oauth_consumer_key", %Q("#{Figaro.env.TWITTER_ACCESS_TOKEN})].join('=')

  • 请注意,由于join您可以使用单引号内插%q或双引号内插%Q而不影响最终结果:

例如

['oauth_consumer_key', %q("#{var}")].join('=') == ["oauth_consumer_key", %Q("#{var}")].join('=')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM