Rails 6.1.4 弃用警告:使用“.”呈现动作
Rails 6.1.4 Deprecation warning: Rendering actions with '.'
我在 运行 rails test
时收到弃用警告。该警告在下面。如果您能帮助我识别我做错了什么,我们将不胜感激。
(编辑:旁注,渲染必须从当前控制器调用中断和 return。我试图使用 ApplicationController.render(...)
代替当前的 render
调用,但是控制器调用没有 return,我收到 :no_content rendered
的 errors/warnings。)
警告:
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
已对 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 test
时收到弃用警告。该警告在下面。如果您能帮助我识别我做错了什么,我们将不胜感激。
(编辑:旁注,渲染必须从当前控制器调用中断和 return。我试图使用 ApplicationController.render(...)
代替当前的 render
调用,但是控制器调用没有 return,我收到 :no_content rendered
的 errors/warnings。)
警告:
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
已对 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
}
)