2015-04-23 149 views
0

我从我的一个模型中生成图像标记,我无法让Rails同时在开发和生产模式下创建工作URL。我开始了这在我的车型之一:路由错误:没有路由匹配[GET] /image/my_image.png

def traffic_light_icon(size=15) 
    image_tag "/assets/#{size}/#{traffic_colour}.png" 
end 

(我越来越进入IMAGE_TAG与include ActionView::Helpers::AssetTagHelper

这个工作在发展很好,但在生产中,该链接不自动更新用适当的哈希值从资产管道中获取图像。如果我尝试使用形式

image_tag "#{size}/#{traffic_colour}.png" 

代替(如各种来源的建议),那么它甚至不开发工作 - 我得到一个路由错误(没有路由匹配[GET] /图片/ 15/amber.png)。

我在做什么错?

回答

2

基本上,答案是不要在模型里面使用image_tag,即使你弄清楚一个黑客可以访问它。为了生成适当的上下文敏感的URL,助手需要访问模型内​​不可用的会话数据。这导致Rails创建一个图像标签,但很糟糕的是,它不适用于所有情况(在我的情况下,在开发中,而不是在生产中)。

关于何时以及如何在Railscast 132模型和控制器内使用助手(有几处提示何时不注意或什么时候注意它引起的问题)有很好的信息。

+0

此外,您可以通过此view_context.asset_path(“nameoffile.extention”)'获取模型和控制器内的资产。 –

相关问题