最近,我将我正在维护的 Rails 应用程序升级到 Rails 6 RC2(来自 5.2.3)。因此,在升级之后,我立即运行了自动化测试 (RSpec),测试输出给了我很多弃用警告。其中一个警告是:
DEPRECATION WARNING: render file: should be given the absolute path to a file
所以我去了触发警告的视图文件,并进行了如下更改,
前: render file: 'devise/sessions/new'
后: render file: Rails.root.join('app', 'views', 'devise', 'sessions', 'new.html.slim')
我再次运行测试,没有看到弃用警告的输出。但是,切换到绝对路径后,视图现在只呈现纯 HTML 代码,但如果我删除.slim
扩展名,即
render file: Rails.root.join('app', 'views', 'devise', 'sessions', 'new.html')
相应的视图已正确呈现,但现在测试将抱怨未使用绝对路径。有没有办法解决这个问题,或者这是一个 Rails/Slim 错误?
在您的情况下,您似乎想要呈现普通视图,即模板。
在这种情况下,file
不推荐使用该选项。相反,您应该使用该template
选项。
render template: 'devise/sessions/new'
或者更好的是,您可以使用此快捷方式:
render 'devise/sessions/new'
背景
该file
选项旨在呈现位于Rails 应用程序之外的视图,您不能依赖 Rails 的视图查找逻辑。因此 Rails 想要有一个绝对路径。要求绝对路径还迫使开发人员考虑相对路径段 ( /../
)。
省略.slim
扩展名然后让模板引擎处理文件是模板的一项功能。使用file
似乎提供了非常相同的功能,但我猜测这只是视图路径查找内部工作的副作用。看起来 Rails 开发人员希望在未来改进文件和模板之间的区别,弃用相关文件是一个中间步骤,以免破坏太多依赖使用file
并仍然期望模板功能的现有应用程序。
PS:没有必要手动拆分您的路径。所以如果你出于某种原因仍然想使用file
绝对路径,而不是
render file: Rails.root.join('app', 'views', 'devise', 'sessions', 'new.html.slim')
用这个
render file: Rails.root.join('app/views/devise/sessions/new.html.slim')
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句