Rails/JavaScript:URL重定向中传递参数值的技术咨询
解决URL重定向时传递参数的问题
嘿,我来帮你搞定这个URL参数传递的问题!你的现有逻辑已经能根据IP定位做基础重定向了,现在只需要加一点点代码,就能把原URL里的参数完整带到重定向后的页面里。
方案一:前端JS直接获取参数(推荐,更简洁)
这种方法不需要在服务器端处理参数,直接在客户端用JS获取当前页面的查询字符串,拼接到重定向URL后面就行。修改后的代码如下:
<% if URI(request.original_url).path == '/subscriptions/spain' %> // 获取当前页面的查询参数(带?前缀,无参数时为空字符串) const searchParams = window.location.search; if (x.country.iso_code !== "ES"){ window.location.replace('/subscriptions/new' + searchParams); } <% elsif URI(request.original_url).path == '/subscriptions/new' %> const searchParams = window.location.search; if (x.country.iso_code == "ES"){ window.location.replace('/subscriptions/spain' + searchParams); } <% end %>
为什么好用?
window.location.search会自动处理参数:如果原URL有?plan=pro&coupon=SAVE10,它就返回这段字符串;如果没有参数,就返回空,不会出现多余的?- 代码更简洁,不需要服务器端额外处理参数拼接
方案二:服务器端ERB拼接参数
如果你需要在服务器端对参数做额外处理(比如过滤、修改),可以用这种方式,先在ERB里获取原URL的参数,再生成重定向URL:
<% # 先获取原URL的查询参数部分 %> <% query_params = URI(request.original_url).query %> <% # 根据是否有参数,拼接成完整的重定向URL %> <% spain_redirect_url = query_params ? "/subscriptions/spain?#{query_params}" : "/subscriptions/spain" %> <% uk_redirect_url = query_params ? "/subscriptions/new?#{query_params}" : "/subscriptions/new" %> <% if URI(request.original_url).path == '/subscriptions/spain' %> if (x.country.iso_code !== "ES"){ window.location.replace('<%= uk_redirect_url %>'); } <% elsif URI(request.original_url).path == '/subscriptions/new' %> if (x.country.iso_code == "ES"){ window.location.replace('<%= spain_redirect_url %>'); } <% end %>
说明
URI(request.original_url).query会提取原URL中?后面的所有参数内容- 我们通过三元判断,确保只有当参数存在时才添加
?,避免出现/subscriptions/spain?这种不规范的URL
两种方案都能完美解决你的问题,根据你的实际需求选就行~
内容的提问来源于stack exchange,提问作者Matthew Bennett
相关产品推荐
相关产品推荐

