首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails引擎:访问引擎下的映像

Rails引擎:访问引擎下的映像
EN

Stack Overflow用户
提问于 2014-04-02 03:00:18
回答 4查看 299关注 0票数 1

我们有一个引擎下的视图,它应该显示一个图像。此映像(icon.png)保存在引擎的"app/assets/images/engine_name/Button-Blank-Red-icon.png路径下。

当我试图显示这个视图时,我得到了下面的错误。

操作控制器::RoutingError(没有路由匹配获得"/images/<>engine_name>/Button-Blank-Red-icon.png"):)

如何正确地显示存储在引擎应用程序/资产/图像/engine_name/下的图像?

以下是视图代码:

代码语言:javascript
复制
<img src="<%= RED_GREEN_YELLOW_CLS[r.step_qties.last.ontime_indicator] %>"  height="15" width="15" />

r.step_qties.last.ontime_indicator返回“绿色”、“红色”和“黄色”之一

常量RED_GREEN_YELLOW_CLS的定义在my_constant.rb中,在引擎的配置/初始化器/:

代码语言:javascript
复制
RED_GREEN_YELLOW_CLS = {
                         'green'  => '/Button-Blank-Green-icon.png',
                         'red'    => '/Button-Blank-Red-icon.png',
                         'yellow' => '/Button-Blank-Yellow-icon.png'
                        }

一种带有图像标记的工作解决方案(指episode#277 in railscasts.com):

代码语言:javascript
复制
<%=image_tag(RED_GREEN_YELLOW_CLS[r.step_qties.last.ontime_indicator], size: '23x23') %>

不需要封锁。

my_constant.rb是:

代码语言:javascript
复制
RED_GREEN_YELLOW_CLS = {
                         'green'  => 'engine_name/Button-Blank-Green-icon.png',
                         'red'    => 'engine_name/Button-Blank-Red-icon.png',
                         'yellow' => 'engine_name/Button-Blank-Yellow-icon.png'
                        }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-04-07 04:09:02

看起来你是通过AssetUrlHelpers来显示你的图像的。您的视图代码需要更改为以下内容:

代码语言:javascript
复制
<img src="<%= image_path(RED_GREEN_YELLOW_CLS[r.step_qties.last.ontime_indicator]) %>" 
  height="15" width="15" />

image_path将正确地添加路径的assets部分,以及由资产管道生成的哈希,以便您获得正确的url。

票数 1
EN

Stack Overflow用户

发布于 2014-04-07 04:21:51

正确的url应该是"/assets/<>engine_name>/Button-Blank-Red-icon.png“,因为当rails编译资产时,它只会将所有gems的/images、/stylesheets和/javascript的所有内容和应用程序/资产dir混合到公共/资产中。它只会复制"<>engine_name>“文件夹和那里的内容。

不清楚这是从哪里来的:"/images/<>engine_name>/Button-Blank-Red-icon.png“是从哪里来的,我不知道如何从您显示的代码中获得它。

尝试将使用的内容更改为“/assets/<>engine_name>/.”而且它应该能工作。

您可以尝试手动编译资产并查看文件的去向,只需执行"bundle exec资产:编译RAILS_ENV=production",就可以在测试之后安全地删除/public/assets,以保持其干净。

票数 1
EN

Stack Overflow用户

发布于 2014-04-10 14:13:43

你试过asset_path助手了吗?

代码语言:javascript
复制
<%= image_tag(asset_path("engine_name/#{RED_GREEN_YELLOW_CLS[r.step_qties.last.ontime_indicator]}"), size: '23x23') %>

将engine_name替换为引擎应用程序的实际名称。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22800709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档