link_to外部URL被视为内部URL,尽管以http://(Rails2)开头



我正在使用

link_to "Click Here", "http://www.cnn.com"

并生成与以下href的链接

"localhost:3000http://www.cnn.com"

出于某种原因,它没有将http://识别为指示外部URL,并将其视为相对URL。

我尝试转到link_to的源代码,并将其复制到我的应用程序助手中。我发现.html_safe正在进行转换,因为当我取出它时,它按预期工作。

我搞不清它在用哪个html_safe。当我在HAML:Util.html_safe的源代码中复制时,它也运行良好。因此,我假设link_to正在使用的html_safe正在解析为其他内容,即使视图是Haml文件。

根据我在Haml方法中看到的内容,当html_safe认为字符串不安全时,它似乎会调用html_safe!来转换字符串。

我使用的是普通的美式英语/拉丁语字符集,所以我不明白为什么它不能正确解析http://

我使用的是Rails 2.3.5。

目前,我计划将href代码交给我的视图,以避免为外部链接调用link_to,但如果有人能帮我弄清楚发生了什么,我将不胜感激。谢谢!

我无法重现这种行为,但这听起来像是一个bug。另外请注意,Rails 2.3.5是相当旧的。我相信目前的2.3.x版本是2.3.12。

附带说明一下,您所指的API文档是针对Rails13.1.3的。因此,您将无法从这些文档中获得有用的2.3.5调试信息。读取应用程序中实际使用的源代码的最简单方法是查看开发机器上的gems文件夹。

无论如何,像现在这样手动编码<a>标签肯定没有错。事实上,它的效率略高,因为它避免了在link_to中执行Ruby代码。所以,实际上最好还是继续做你正在做的事情。

我在ERB文件中遇到了同样的问题,当我使用引用的链接而不是未引用的链接并随后调用html_safe时,我的问题得到了解决。也许你的问题也会得到解决。

相关内容

最新更新