假设我在同一目录中有视图模板 index.html.erb 、index.html.haml 和 index.html.slim 。如何配置 Rails 首先使用 slim 模板(如果存在),然后使用 haml 模板,最后使用 erb 模板?
我认为您需要创建一个 PathResolver,它使用除键顺序之外的其他内容来获取实际文件(FileSystemResolver 是默认值;请参阅 action_view/template/resolver.rb;请参阅 action_view/template/handlers.rb 了解键 -订购我所指的东西)。但这尚未得到证实;抱歉:(
我不确定如何告诉 Rails 使用一个新的实现(假设不仅仅是猴子修补)。使用自定义视图解析器就像在控制器类中调用append_view_path一样简单,但我不确定这是否有意义。
我不确定这在旧版 Rails 中是否有效,但在 Rails 7 中,处理程序按照注册顺序排列优先级。您可以重新注册处理程序,使其排在最后。例如将 ERB 移至最后优先级:
ActionView::Template.unregister_template_handler(:erb)
ActionView::Template.register_template_handler(
:erb, ActionView::Template::Handlers::ERB.new)
对 haml 进行同样的操作:
ActionView::Template.unregister_template_handler(:haml)
ActionView::Template.register_template_handler(
:haml, Haml::RailsTemplate.new)
更一般地说,如果您在 gem 中搜索
register_template_handler
,那么您可能会找到需要注册的处理程序。
您可以将该代码放入初始值设定项中,或者仅在存在查询字符串时才运行它。