我无法在我的引擎中获取图像资源以在主机应用程序内呈现。
由于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"):
答案 0 :(得分:3)
你根本不需要这样做,因为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" %>
这是正确的方法。
The Engines Guide包含有关引擎的更多有用信息。