development.rb:
config.action_controller.asset_host = "assets.myserver.com"
查看脚本:
<%= image_tag('header.jpg') %>
产率:
<img alt="Header" src="/header.jpg" />
应该是:
<img alt="Header" src="http://assets.myserver.com/header.jpg" />
我正在使用我猜的rails-api
宝石禁用某些资产并查看渲染内容。
似乎不应该太难以重新实现(覆盖image_tag
)来添加这个非常小的功能。想要这样做似乎有点奇怪。但是,我对rails很感兴趣,想知道如何将其作为一种学习体验。
问题:
答案 0 :(得分:3)
我已尝试过您的配置,但是当我在config.action_controller.asset_host = "assets.myserver.com"
development.rb
中使用image_tag
按预期方式工作时:
<img alt="Header" src="http://assets.myserver.com/assets/header.jpg" />
我在Rails 3.2.7和3.2.8下测试了它,但它适用于两个版本。
<强>更新强>
在我原来的回答中,我没有使用rails-api
宝石。使用rails-api
gem image_tag
时,如问题中所述。
回答实际问题,您可以在config/initializers
中添加初始值设定项。只需使用以下代码创建一个文件,例如image_tag_helper.rb
:
# config/initializers/image_tag_helper.rb
module ActionView
module Helpers
module AssetTagHelper
def image_tag(source, options = {})
options[:src] = "http://#{source}"
tag("img", options)
end
end
end
end
这基本上是重新打开模块并用您自己的方法替换image_tag
方法。 module AssetTagHelper
中的所有其他方法保持不变。请查看Rails repository at github以获取image_tag
方法的完整“示例”。
文件的名称并不重要。引导应用程序时会加载config/initializers
中的所有文件。
基本上这是Ruby的语言特性,Ruby允许您在代码中的任何地方重新打开类并添加或替换方法(您可以在rubylearning.com找到关于此主题的更多内容)。