将查询字符串附加到request.request_uri,而不知道是否有查询字符串

时间:2011-02-03 07:12:05

标签: ruby-on-rails

当用户在iPhone上访问我的网站时,我想向他们展示一个包含2个选项的页面:

1)去获取我们的应用程序或 2)继续访问请求的URL

我通过检查应用程序控制器中的用户代理并呈现视图来完成此操作。

要使选项2在该视图上正常工作,我希望链接保留原始URL并附加查询字符串参数fullsite = 1。我在应用程序控制器的before_filter中查找该查询字符串参数param,并设置一个cookie,以便不再提示用户。

将查询字符串参数附加到request.request_uri的最简洁方法是什么?知道该请求网址可能有也可能没有查询字符串开头?我知道直接检查请求是否有参数,但是我想知道是否有一个帮助器在任何一种情况下都没有干净地附加参数(没有参数或现有的参数)而没有自己评估。寻求正确的“固定”方式来做到这一点。

1 个答案:

答案 0 :(得分:2)

执行此操作的最佳方法可能是将您的标志添加到params哈希中,该哈希已经拥有构建该链接所需的所有其他信息(假设您捕获iPhone并在before_filter中呈现),然后从修改后的params hash建立你的链接:

在你的before_filter中:

params[:fullsite] = 1

然后在你看来:

<%= link_to('Continue to the Full Site', params) %>

通过这种方式,Rails可以完成转义和附加查询字符串的所有混乱工作 - :fullsite和所包含的原始查询字符串。

如果您只是使用:fullsite作为避免多次通过iPhone门户重定向iPhone的方法,那么这些方法中的任何一种似乎都会更好:

  1. 改为在会话中设置:fulltext,或
  2. 仅在用户使用iPhone时重定向用户且request.referer不是您的网站。
  3. 希望这有帮助!