我把一个应用程序从rail5.2迁移到rail6,只剩下一件事要做,但我不知道怎么做。
我有这样的折旧警告:
衰退警告:ActionView::应使用查找上下文、分配和控制器构造基本示例。(从位于/Users/xxx/xxxx/app/models/stock. rb:42的new调用)
从这个代码:
view = ActionView::Base.with_empty_template_cache.new(
ActionController::Base.view_paths,
categories: categories,
periods: periods
)
result = view.render formats: [:xlsx],
handlers: [:axlsx],
template: 'admin/reports/logistics/stocks_by_age'
我不知道怎么修复,我去查看了源代码中的折旧,但它并没有帮助我弄清楚我应该怎么做,而且我也没有真正找到任何关于这个"查找"的文档。
请问,谁能帮我理解一下这个折旧?
3条答案
按热度按时间gdrx4gfi1#
看起来你试图在请求之外呈现视图。Rails在过去添加了一个特性,简化了这个问题。现在你只需要用你的参数调用
ApplicationController.render
。在你的例子中,它应该看起来像这样:如果您有物流控制器,下面的代码也应该工作:
有关如何执行此操作的详细说明,请参阅以下文章。https://blog.bigbinary.com/2016/01/08/rendering-views-outside-of-controllers-in-rails-5.html
afdcj2ne2#
出现此弃用警告是因为您将
ActionController::Base.view_paths
作为第一个参数传递给ActionView::Base.new
。这在以前是可以的,但现在需要ActionView::LookupContext
的示例。如果查看ActionView::Base#initialize
的最新版本,您会看到消息出现的地方,它使用ActionView::Base.new
的第一个参数调用ActionView::Base.build_lookup_context
。您可以通过传递ActionView::LookupContext.new(ActionController::Base.view_paths)
或ActionView::Base.build_lookup_context(ActionController::Base.view_paths)
轻松地消除此警告,因为无论如何它最终都会使用ActionView::LookupContext.new(ActionController::Base.view_paths)
或ActionView::Base.build_lookup_context(ActionController::Base.view_paths)
。虽然
ApplicationController.render
有助于在请求之外呈现视图,但有时您需要ActionView::Base
的示例本身(在我的例子中,我使用一个示例作为我的演示者类在其测试中的视图上下文)。ssm49v7z3#
使用
ApplicationController.render
不适合我,所以我构建了自己的自定义可重用解决方案。那么如果你有类似
现在可以是
它还将删除弃用消息。