Rails 3中应用程序的绝对URL

时间:2010-11-22 23:53:34

标签: ruby-on-rails url ruby-on-rails-3 absolute

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

我有一个应用程序,有时会嵌入到另一个网页上。为简化说明,假设有一台服务器,它可以提供普通应用程序或应用程序版本以进行嵌入,具体取决于域名。

对于后一个域,应用程序使用link_to,product_url,image_tag等生成的链接应该是绝对的(http://servername/images/image_01.jpg),对于前者,它们应该是相对的(我想,除非我能优雅地解决这个问题。

我知道我可以使用例如product_url(:id, [...], :host => request.host, :port => request.port)生成绝对URL,但我发现这种方法存在两个问题。首先,在每个视图中的每个链接请求中重写此代码似乎效率低下。其次,当应用程序独立运行而非嵌入式运行时,我宁愿拥有效率和最佳实践的相对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 个答案:

答案 0 :(得分:1)

我一直在寻找源代码,似乎Rails 3.0不支持将其设置为默认值。我可能会选择猴子修补url_for,除非你有充分的理由不这样做。

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