1

提前抱歉问题的长度,但我想总结一下我到目前为止的知识,并尝试更快地找到正确的解决方案。

我有一个有时会嵌入另一个网页的应用程序。为了简化解释,假设有一个服务器,它提供普通应用程序或用于嵌入的应用程序版本,具体取决于域名。

对于后一个域,应用程序使用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。所以......

  1. 我是否应该制作一些辅助功能来检测链接是否将被嵌入?
  2. 修补 url_for 使其按我想要的方式工作,而无需更改应用程序视图?
  3. 还是重写我所有的视图文件?

提前感谢任何回复。

干杯,

泽夫

4

1 回答 1

1

我已经搜索了资源,似乎 Rails 3.0 不支持将其设置为默认值。url_for除非您有充分的理由不这样做,否则我可能会进行猴子修补。

:only_path如果您设置为默认值 true 或基于域的默认值,则有一个选项。目前,它默认为存在该:host选项。这个补丁可能会破坏一些编码不太好的插件,请确保您对它们进行了很好的测试。

于 2010-11-23T00:31:47.333 回答