0

我正在从我的一个模型中生成图像标签,我无法让 Rails 同时在开发和生产模式下创建工作 URL。我在我的一个模型中开始使用这个:

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] /image/15/amber.png)。

我究竟做错了什么?

4

1 回答 1

2

基本上,答案是不要在模型中使用 image_tag,即使你想出了一个 hack 来访问它。为了生成正确的上下文相关 URL,帮助程序需要访问模型中不可用的会话数据。这会导致 Rails 创建一个图像标签,但很糟糕,它并非在所有情况下都有效(在我的情况下,在开发中但不是在生产中)。

在Railscast 132中有关于何时以及如何在模型和控制器中使用助手的很好的信息(有一些关于何时不使用或何时注意它导致的问题的提示)。

于 2015-04-23T13:30:37.333 回答