Rails 6.1.4 弃用警告:使用"." 渲染操作



运行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: <path>,尝试file: <path>),但是,我在测试控制台收到此错误:

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

弃用包含.的部分名称是为了防止解析部分名称时出现歧义。我们应该显式地说明格式,而不是将它们包含在我们传递给render的部分名称中。

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

你可以把它作为一个选项发送进来(并使部分名称也成为一个选项),像这样:

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

最新更新