我无法在引擎中获取图像资产以在主机应用程序内部进行渲染。
由于view/layout/application.html.erb
文件中的代码如下,我的主机应用程序能够从引擎中捕获CSS和javascript :
<%= stylesheet_link_tag 'my_engine/application', :media => 'all' %>
<%= javascript_include_tag 'my_engine/application' %>
但是,我不知道类似的方法来包含来自引擎的图像。关于如何获取引擎的图像文件以在主机应用程序中呈现的任何想法?
编辑:
在引擎的engine.rb文件中,我将images目录添加到了应用的目录中,如下所示:
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" %>
这将是正确的方法。
《引擎指南》还包含有关引擎的更多有用信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句