最近,我将要维护的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的错误?
在您的情况下,您似乎要呈现一个普通视图,即template。
在这种情况下,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] 删除。
我来说两句