Rails 6.1.4 弃用警告:使用“。”呈现操作

Posted

技术标签:

【中文标题】Rails 6.1.4 弃用警告:使用“。”呈现操作【英文标题】:Rails 6.1.4 Deprecation warning: Rendering actions with '.' 【发布时间】:2021-10-20 12:03:45 【问题描述】:

我在运行 rails test 时收到了弃用警告。该警告如下。在确定我做错了什么方面提供任何帮助表示赞赏。

(编辑:旁注,渲染必须中断并从当前的控制器调用返回。我尝试使用ApplicationController.render(...) 代替当前的render 调用,但这并没有从控制器调用返回,我是收到:no_content rendered 的错误/警告。)

警告:

DEPRECATION WARNING: Rendering actions with '.' in the name is deprecated: actions/action_success.json (called from update at /<path>/app/controllers/table_base_controller.rb:39)

引发警告的代码就是在控制器中对render 的调用:

render('/actions/action_success.json', locals: 
  view: action.lookup_view('default'),
  action: action,
  area: current_area,
  account: current_account
) 

我已尝试按照指示取消.json(也尝试添加template: &lt;path&gt;,尝试file: &lt;path&gt;),但是,我在测试控制台中收到此错误:

Error:
TableControllerTest#test_Admin_should_update_via_loan_table:
ActionView::MissingTemplate: Missing template actions/action_success with :locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :jbuilder]. Searched in:
  * "/<path>/app/views"

    app/controllers/table_base_controller.rb:39:in `update'
    app/controllers/application_controller.rb:79:in `with_account'
    test/controllers/table_controller_test.rb:14:in `block in <class:TableControllerTest>'

有问题的文件(路径:app/views/actions/action_success.json.jbuilder):

# frozen_string_literal: true

json.status 'success'
json.status_code 200
json.messages action.messages

if view
  json.result do
    json.partial! view.to_s, result: action.result, locals:  area: area 
  end
else
  json.result action.result
end

【问题讨论】:

您的请求点击该操作不是请求 json 响应,因此它正在尝试呈现 HTML 【参考方案1】:

已弃用包含 . 的部分名称,已改为 prevent ambiguity in parsing the partial name。我们应该明确声明格式,而不是将它们包含在我们传递给渲染的部分名称中。

如果您传入的字符串中没有格式,您需要确保渲染所期望的formats 包含您正在使用的格式,在本例中为json,这不是默认格式之一。

您可以将其作为选项发送(并将部分名称也设为选项),如下所示:

render(
  partial: '/actions/action_success',
  formats: [:json],
  locals: 
    view: action.lookup_view('default'),
    action: action,
    area: current_area,
    account: current_account
  
) 

【讨论】:

以上是关于Rails 6.1.4 弃用警告:使用“。”呈现操作的主要内容,如果未能解决你的问题,请参考以下文章

如何选择性地静音 Rails 3 弃用警告?

如何解决弃用警告“方法 to_hash 已弃用并将在 Rails 5.1 中删除”

在 Heroku 中运行任务的 Rails 2.3 样式插件和弃用警告

Rails 升级 3.2 到 4.0:模型弃用警告

如何修复弃用警告:类级别方法将不再继承 Rails 6.1 中的范围?

在 rails 3 中弃用 after_save 解决方案