升级Ruby3.2.2+Rails6.1后ActionView::Base报html_fallback_for_js未定义错
解决Rails 6.1 + Ruby 3.2.2下ActionView::Base实例化报错问题
升级到Rails 6.1后,ActionView::Base的初始化逻辑做了调整,必须传入lookup_context、assigns、controller三个参数。直接传nil给controller参数会导致视图上下文缺失必要配置,进而触发html_fallback_for_js方法不存在的错误——这个方法实际是controller视图配置的一部分,并非PathSet的方法。
解决方法如下:
不要传nil给controller参数,要么复用当前上下文的controller(如果在controller/action环境中),要么创建一个空的dummy controller实例:
# 场景1:在controller内部调用,直接传self view = ActionView::Base.new(lookup_context, assigns, self) # 场景2:独立环境下,创建dummy controller dummy_controller = ApplicationController.new view = ActionView::Base.new(lookup_context, assigns, dummy_controller)如果需要更轻量的实现,也可以手动给lookup_context补充配置,但dummy controller的方式更贴合Rails的设计逻辑,能避免后续出现其他上下文缺失的问题。
内容的提问来源于stack exchange,提问作者marimaf
相关产品推荐
相关产品推荐

