Ruby on rails Rails:在Rails 6中使用绝对路径

Ruby on rails Rails:在Rails 6中使用绝对路径,ruby-on-rails,ruby-on-rails-6,Ruby On Rails,Ruby On Rails 6,最近,我将正在维护的Rails应用程序升级到Rails6RC2(来自5.2.3)。因此,在升级之后,我立即运行了自动测试(RSpec),测试输出给了我很多不推荐的警告。其中一个警告是: DEPRECATION WARNING: render file: should be given the absolute path to a file 因此,我转到触发警告的视图文件,并做了如下更改 之前: 渲染文件:“设计/会话/新建” 之后: 呈现文件:Rails.root.join('app','vi

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

DEPRECATION WARNING: render file: should be given the absolute path to a file
因此,我转到触发警告的视图文件,并做了如下更改

之前:
渲染文件:“设计/会话/新建”

之后:
呈现文件:Rails.root.join('app','views','designe','sessions','new.html.slim')

我再次运行了测试,没有看到弃用警告的输出。但是,在切换到绝对路径之后,视图现在只呈现纯HTML代码,但是如果我删除
.slim
扩展名,即

render file: Rails.root.join('app', 'views', 'devise', 'sessions', 'new.html')

相应的视图已正确呈现,但现在测试将抱怨未使用绝对路径。是否有办法修复此问题,或者这是Rails/Slim缺陷?

在您的情况下,看起来您希望渲染正常视图,即模板

在这种情况下,不建议使用
文件
选项。相反,您应该使用
模板
选项

呈现模板:“设计/会话/新建”
或者更好,您可以使用以下快捷方式:

呈现“设计/会话/新建”
背景

文件
选项用于呈现Rails应用程序外部的视图,您不能依赖Rails的视图查找逻辑。因此Rails希望有一个绝对路径。要求绝对路径还迫使开发人员考虑相对路径段(
/../

省略
.slim
扩展名,然后由模板引擎处理文件是模板的一项功能。使用
文件
似乎提供了相同的功能,但我猜这只是视图路径查找内部工作的副作用。看起来Rails开发人员希望在将来改进文件和模板之间的分布,而不推荐相关文件是一个中间步骤,以避免破坏太多依赖于使用
文件
但仍期望模板功能的现有应用程序

PS:不需要手动分割路径。因此,如果出于某种原因,您仍然希望使用带有绝对路径的
文件
,而不是

渲染文件:Rails.root.join('app','views','designe','sessions','new.html.slim')
用这个

渲染文件:Rails.root.join('app/views/designe/sessions/new.html.slim')
我在使用Rails 6
纯API应用程序时遇到了同样的挑战

我想从名为
home\u controller.rb的控制器呈现一个静态页面

这是我的代码

require 'rails/application_controller'

class HomeController < Rails::ApplicationController
  def index
    render file: Rails.root.join('public/index.html')
  end
end
以下是我解决问题的方法

require 'rails/application_controller'

class HomeController < Rails::ApplicationController
  def index
    render file: Rails.root.join('public/index.html')
  end
end
问题是我缺少目录
public
中的文件
index.html
,因此Rails无法找到它

我所要做的就是在目录
public
中添加文件
index.html
。这一次我测试的时候还可以

就这些


我希望这会有所帮助

我正在将视图作为文件呈现为扩展布局。添加绝对路径不会删除弃用警告。