Как исправить эту амортизацию ActionView :: Base с помощью контекста поиска? - PullRequest
1 голос
/ 16 января 2020

Я перенесу приложение с рельсов 5.2 на рельсы 6. Осталось сделать только одну вещь, но я не знаю как.

У меня есть это предупреждение об износе:

DEPRECATION WARNING: ActionView::Base instances should be constructed with a lookup context, assignments, and a controller. (called from new at /Users/xxx/xxxx/app/models/stock.rb:42)

из этого кода:

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'

Я не понимаю, как это исправить. Я посмотрел амортизацию в исходном коде, но это не помогло мне понять, что я должен делать, и я не нашел документации для этого «поиска».

Пожалуйста, кто-нибудь может помогите мне понять эту амортизацию?

1 Ответ

2 голосов
/ 16 января 2020

Похоже, вы пытаетесь визуализировать представление вне запроса. В прошлом Rails добавил функцию, которая упростила это. Теперь единственное, что вам нужно сделать, это позвонить ApplicationController.render с вашими параметрами. В вашем случае это должно выглядеть примерно так:

ApplicationController.render(
  template: 'admin/reports/logistics/stocks_by_age',
  locals: { categories: categories, periods: periods } # maybe assigns: { ... }
  handlers: [:axlsx],
  formats: [:xlsx]
)

Также следующий код должен работать, если у вас есть контроллер логистики:

Admin::Reports::LogisticsController.render(:stocks_by_age, ...other params same as above..., handlers: [:axlsx], formats: [:xlsx])

См. Следующую статью для лучшего описания того, как сделать это. https://blog.bigbinary.com/2016/01/08/rendering-views-outside-of-controllers-in-rails-5.html

...