如何从控制器的每个动作中渲染一个通用的 JS?
How to render a common JS from every action of controller?
例如,我有一个名为Organizations
的controller,它包括基本的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
例如,我有一个名为Organizations
的controller,它包括基本的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