gpt4 book ai didi

ruby-on-rails - rails : Use of absolute path in Rails 6

转载 作者:行者123 更新时间:2023-12-04 11:46:48 25 4
gpt4 key购买 nike

最近,我将我正在维护的 Rails 应用程序升级到 Rails 6 RC2(来自 5.2.3)。因此,在升级之后,我立即运行了自动化测试 (RSpec),测试输出给了我很多弃用警告。其中一个警告是:

DEPRECATION WARNING: render file: should be given the absolute path to a file

所以我去了触发警告的 View 文件,并进行了如下更改,

前: render file: 'devise/sessions/new'
后: render file: Rails.root.join('app', 'views', 'devise', 'sessions', 'new.html.slim')
我再次运行测试,没有看到弃用警告的输出。但是,切换到绝对路径后, View 现在只呈现纯 HTML 代码,但如果我删除 .slim扩展名,即
render file: Rails.root.join('app', 'views', 'devise', 'sessions', 'new.html')

相应的 View 已正确呈现,但现在测试将提示未使用绝对路径。有没有办法解决这个问题,或者这是一个 Rails/Slim 错误?

最佳答案

在您的情况下,您似乎想要呈现普通 View ,即 模板 .

在这种情况下,使用 file option 不是推荐的方式。相反,您应该使用 template选项。

render template: 'devise/sessions/new'

或者更好的是,您可以使用此快捷方式:

render 'devise/sessions/new'

背景
file option 旨在呈现位于 Rails 应用程序之外的 View ,您不能依赖 Rails 的 View 查找逻辑。因此 Rails 想要有一个绝对路径。要求绝对路径还迫使开发人员考虑相对路径段 ( /../ )。

省略 .slim扩展名,然后让模板引擎处理文件是模板的一项功能。使用 file似乎提供了非常相同的功能,但我猜测这只是 View 路径查找内部工作的副作用。看起来 Rails 开发人员希望在 future 改进文件和模板之间的区别,弃用相关文件是不破坏太多依赖使用 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')

关于ruby-on-rails - rails : Use of absolute path in Rails 6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57335007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com