image_tag 无法在 ActionView FormBuilder 助手中工作

image_tag not working in ActionView FormBuilder helper

我向 ActionView 表单生成器添加了一个 language_select 方法:

# app/helpers/form_helper.rb
class ActionView::Helpers::FormBuilder
  include ActionView::Helpers::TagHelper
  include ActionView::Helpers::FormTagHelper
  include ActionView::Helpers::FormOptionsHelper
  include ActionView::Helpers::AssetTagHelper

  def language_select(method, options = {}) 
    image_tag("language-flags/16/en.png")
  end
end

问题是 image_tag returns /images/language-flags/16/en.png 的图像不存在。我在 app/assets/images/language-flags/16/fr.png 中确实有一张图片,但它不是通过 Sprockets 中间件提供的。其他地方 image_tag 工作正常。

查看 Rails' 来源后,这似乎是 image_tag 的标准行为,更准确地说,asset_path 并且 Sprockets 实际上修改了此行为以包含,因为例如,文件摘要。 asset_path 的这种修改似乎在此上下文中不可用。

解决方案是在表单构建器的上下文中调用 @template 属性上的视图助手(如 image_tag)。

def language_select(method, options = {}) 
  @template.image_tag("language-flags/16/en.png")
end