如何在 Rails 应用程序中提供来自引擎的图像资产



我在引擎中获取图像资产以在主机应用程序中渲染时遇到问题。

我的主机应用程序能够从引擎中抓取 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" %>

将是执行此操作的正确方法。

引擎

指南还包含有关引擎的更多有用信息。

相关内容

  • 没有找到相关文章

最新更新