如何从控制器的每个动作中渲染一个通用的 JS?

How to render a common JS from every action of controller?

例如,我有一个名为Organizationscontroller,它包括基本的CRUD操作和所有的操作respond_to JS,所以我写了respond_to 块在控制器 respond_to :js, { only: %i[index destroy create] } 的开头,现在想要为所有这些动作呈现一个通用的 JS,即想要呈现 index.js.erb 所有动作而不是所有动作特定的 JS。那么有什么解决方案呢?

您可以通过覆盖ActionController::ImplicitRender提供的default_render方法来覆盖隐式渲染。

class OrganizationsController < ApplicationController
  def default_render(*args)
    # is there an action specific template?
    if template_exists?(action_name.to_s, _prefixes, variants: request.variant)
      super
    # is there an index template we can use insted?
    elsif template_exists?('index', _prefixes, variants: request.variant) 
      render :index, *args
    # We don't have a template. lets just let the default renderer handle the errors
    else 
      super
    end
  end
  # ...
end