提前抱歉问题长度,但我想总结一下我的知识,并尝试更快地研究正确的解决方案。
我有一个应用程序,有时会嵌入到另一个网页上。为简化说明,假设有一台服务器,它可以提供普通应用程序或应用程序版本以进行嵌入,具体取决于域名。
对于后一个域,应用程序使用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.所以......
预先感谢任何回复。
干杯,
泽夫
答案 0 :(得分:1)
我一直在寻找源代码,似乎Rails 3.0不支持将其设置为默认值。我可能会选择猴子修补url_for
,除非你有充分的理由不这样做。
有一个选项:only_path
,如果您设置为默认值true或默认基于域。目前,它默认为:host
选项的存在。这个补丁可能会打破一些不太好编码的插件,确保你测试它们。