image_tag在ActionView FormBuilder帮助器中不起作用

时间:2016-06-03 23:28:01

标签: ruby-on-rails ruby-on-rails-4 sprockets

我在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将图片返回到/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的这种修改在这种情况下不可用。

1 个答案:

答案 0 :(得分:0)

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

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