Ruby on rails 使用ApplicationController.render()时不包括帮助程序

Ruby on rails 使用ApplicationController.render()时不包括帮助程序,ruby-on-rails,ruby-on-rails-5,Ruby On Rails,Ruby On Rails 5,我已将Rails配置为默认情况下不在所有视图中包含所有帮助程序: config.action_controller.include_all_helpers = false 收到来自外部源的HTTP请求后,我需要使用ApplicationController.render,使用WebSocket更新一个视图: def update_ui stream_id = "operations_#{@operation.user.id}" ActionCable.server.broadcast(

我已将Rails配置为默认情况下不在所有视图中包含所有帮助程序:

config.action_controller.include_all_helpers = false
收到来自外部源的HTTP请求后,我需要使用
ApplicationController.render
,使用WebSocket更新一个视图:

def update_ui
  stream_id = "operations_#{@operation.user.id}"
  ActionCable.server.broadcast(stream_id,
                               operation: render_operation(@operation))
end

def render_operation(operation)
  ApplicationController.render('app_builder/services/download_page', assigns: { operation: operation })
end
渲染视图时,由于找不到辅助对象的方法,视图将崩溃:

# Rendered app_builder/services/download_page.html.erb within layouts/application (87.6ms)
# <Thread:0x00007fc869307120@/app/app/controllers/files_controller.rb:17 run> terminated with exception (report_on_exception is true):
# /app/app/views/app_builder/services/download_page.html.erb:3:in `block in _app_views_app_builder_services_download_page_html_erb___4537878515684940940_70249328594880': undefined method `show_file_status' for #<#<Class:0x00007fc864913960>:0x00007fc8648f7710> (ActionView::Template::Error)
#呈现的应用程序_builder/services/download_page.html.erb在布局/应用程序中(87.6ms)
#异常终止(异常报告为真):
#/app/app/views/app_builder/services/download_page.html.erb:3:in`block in_app_views_app_builder_services_download_page_html_erb_45378785; 156849440940_70249328594880':未定义的方法“show_file_status”(ActionView::Template::Error)

如何在不更改配置以默认包含所有帮助程序的情况下解决此问题?

您是否尝试过在相关控制器中包含帮助程序文件?另外,为什么要执行
ApplicationController.render
?这似乎很奇怪。但是,我相信你有充分的理由。是的,我已经尝试使用
helper'app\u builder/services'
将helper显式地包含在控制器中,但没有成功。我使用的是
ApplicationController.render
,因为在收到外部源的请求后,我需要使用WebSocket刷新视图。事实上,根据,这是实现该方法的主要原因:“具体来说,该功能是出于从后台任务和WebSocket工作人员渲染Rails视图的愿望而产生的”。我个人从未尝试过,但也许您可以实例化控制器,并在该特定实例中包含所需的帮助程序,类似于:
c=ApplicationController.new;c、 扩展(你的助手类);c、 渲染(…)
。这可不是一个很好的练习啊!这是使用
ApplicationController.render
的一个很好的理由。我使用一种老派的方式从后台任务、服务对象等进行渲染,所以我不知道。我学到了一些新东西!顺便说一句,如果您在类方法中,您是否尝试过
extend
ing帮助文件?考虑到这个错误,我不太清楚
#
是一个实例还是一个类。谢谢你们两位的建议!我最终以一种非常丑陋的方式解决了这个问题,直接在视图中添加
,因为扩展控制器也不起作用。无论如何,我会把问题留着,以防有更干净的方法来解决@jvillian我很高兴这个问题很有用,我也对你提到的老派方式感兴趣,也许你可以对此发表一些评论?