如何重定向到页面指定锚点?购物车锚点跳转异常问题
解决动态锚点跳转失效的问题
我一眼就看出问题出在哪了——你踩了Ruby字符串插值的常见坑!
你现在的代码里,'#{@product.id}'是用单引号包裹的,Ruby只会把它当作纯文本输出,不会解析里面的#{}变量,所以生成的URL才会带着#{@product.id}这种无效内容。而硬编码#4能正常工作,是因为它就是纯文本的锚点值。
给你几个靠谱的解决方案:
方案1:改用双引号实现变量插值
直接把单引号换成双引号,同时注意拼接的方式(别用+=,避免原URL已有锚点时重复):
format.html { redirect_to("#{request.env['HTTP_REFERER']}##{product.id}") }
另外提一句,你方法里已经定义了局部变量product = Product.find(params[:product_id]),没必要用@product,直接用product.id更合适。
方案2:字符串拼接(不用插值语法)
如果不习惯插值,也可以用字符串拼接的方式,记得把整数类型的product.id转成字符串:
format.html { redirect_to(request.env['HTTP_REFERER'] + '#' + product.id.to_s) }
方案3:更稳妥的Rails路由方式
直接操作HTTP_REFERER其实有风险——如果这个请求没有来源页(比如用户直接访问create接口),request.env['HTTP_REFERER']会是nil,导致报错。更优雅的做法是用对应的路由助手,加上anchor参数:
# 假设原页面是商品列表页,对应路由助手是products_path format.html { redirect_to products_path(anchor: product.id) }
最后额外提个优化建议:如果你的项目是Rails 7+,可以试试用Turbo Stream实现无刷新添加购物车,这样完全避免页面刷新回到顶部的问题,用户体验会好很多~
内容的提问来源于stack exchange,提问作者Kane Andrew Gibson
相关产品推荐
相关产品推荐

