Rails 6.1.3.2配置image_tag全局懒加载报NoMethodError如何解决?
错误原因
config.action_view.image_loading配置是Rails 7.0及以上版本才支持的特性,你当前使用的Rails 6.1.3.2版本并未内置该配置,因此添加配置后会触发undefined method 'image_loading=' for ActionView::Base:Class的NoMethodError报错。
解决方案
- 升级Rails版本到7.0或更高版本,升级完成后直接使用
config.action_view.image_loading = "lazy"配置即可生效,无需额外修改视图代码。 - 若暂时无法升级Rails版本,可以通过初始化补丁实现相同效果:
在config/initializers/目录下新建image_lazy_load.rb文件,添加如下代码:
添加补丁后重启服务,原先的# 给ActionView补全image_loading配置和默认加载逻辑 ActionView::Base.class_eval do mattr_accessor :image_loading, instance_writer: false, default: nil end Rails.application.config.action_view.singleton_class.class_eval do def image_loading=(value) ActionView::Base.image_loading = value end end module ImageTagDefaultLoading def image_tag(source, options = {}) options[:loading] ||= ActionView::Base.image_loading super end end ActionView::Helpers::AssetTagHelper.prepend(ImageTagDefaultLoading)config.action_view.image_loading = "lazy"配置即可正常生效。 - 无需配置的简易方案:手动给项目中所有
image_tag调用添加loading: "lazy"参数即可实现单标签懒加载。
内容的提问来源于stack exchange,提问作者franckandbeans
相关产品推荐
相关产品推荐

