提前抱歉问题的长度,但我想总结一下我到目前为止的知识,并尝试更快地找到正确的解决方案。
我有一个有时会嵌入另一个网页的应用程序。为了简化解释,假设有一个服务器,它提供普通应用程序或用于嵌入的应用程序版本,具体取决于域名。
对于后一个域,应用程序使用link_to、product_url、image_tag等生成的链接应该是绝对的(http://servername/images/image_01.jpg
),而对于前者,它们应该是相对的(我认为,除非我不能优雅地解决这个问题)。
我知道我可以使用例如 生成绝对 URL product_url(:id, [...], :host => request.host, :port => request.port)
,但我发现这种方法存在两个问题。首先,在每个视图的每个链接请求中重写此代码似乎效率低下。其次,当应用程序独立运行而不是嵌入时,我宁愿使用相对 URL 来提高效率和最佳实践。
对于静态资产,可以在 config/environments/whatever.rb 中执行以下操作:
config.action_controller.asset_host = "http://assets.example.com"
但是,这不会影响 Rails 生成的链接。
几天来,我一直在寻找这个问题的答案,但目前还没有 Rails 3 的最新信息。这里有一段旧代码可以解决 Rails 2 的问题:
http://opensoul.org/2009/2/21/force-absolute-urls
但它似乎不适用于 Rails 3。所以......
- 我是否应该制作一些辅助功能来检测链接是否将被嵌入?
- 修补 url_for 使其按我想要的方式工作,而无需更改应用程序视图?
- 还是重写我所有的视图文件?
提前感谢任何回复。
干杯,
泽夫