我在引擎中获取图像资产以在主机应用程序中渲染时遇到问题。
我的主机应用程序能够从引擎中抓取 css 和 javascript,这要归功于 view/layout/application.html.erb
文件中的以下代码:
<%= stylesheet_link_tag 'my_engine/application', :media => 'all' %>
<%= javascript_include_tag 'my_engine/application' %>
但是,我不知道包含来自我的引擎的图像的类似方法。 关于如何让引擎的图像文件在主机应用程序中呈现的任何想法?
编辑:
在我的引擎的 engine.rb 文件中,我将图像目录添加到应用程序的目录中,如下所示:
initializer :assets do |config|
Rails.application.config.assets.paths << root.join("app", "assets", "images", "my_engine", "some_subdirectory")
end
视图有一个图像标记,如下所示:
<%= image_tag "/my_engine/some_subdirectory/picture.png" %>
但是我的服务器日志,我看到这个:
Started GET "/assets/some_subdirectory/picture.png" for 127.0.0.1 at 2014-04-06 20:11:38 -0500
Served asset /some_subdirectory/picture.png - 404 Not Found (3ms)
ActionController::RoutingError (No route matches [GET] "/assets/some_subdirectory/picture.png"):
你根本不需要这样做,因为Rails会为你做这件事:
initializer :assets do |config|
Rails.application.config.assets.paths << root.join("app", "assets", "images", "my_engine", "some_subdirectory")
end
相反,您可以像在应用程序中引用图像一样引用图像:
<%= image_tag "your_image.jpg" %>
我在这里假设your_image.jpg
在你的引擎中处于/app/assets/images/your_image.jpg
。如果它位于子目录中,则:
<%= image_tag "subdirectory/your_image.jpg" %>
没有必要在路径中包含引擎的名称,除非文件位于 app/assets/images/your_engine/your_image.jpg
等位置,在这种情况下:
<%= image_tag "your_engine/your_image.jpg" %>
将是执行此操作的正确方法。
引擎指南还包含有关引擎的更多有用信息。