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
我向 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