Hunny Jummani
Hunny Jummani

Reputation: 3

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

For example, I have a controller named Organizations, which includes basic CRUD actions and all the actions respond_to JS, so I wrote the respond_to block at the beginning of the controller respond_to :js, { only: %i[index destroy create] } and now want to render a common JS for all these actions ie want to render index.js.erb on all actions rather than all action specific JS. So What can be the solution for the same?

Upvotes: 0

Views: 199

Answers (1)

max
max

Reputation: 102036

You can override the implicit rendering by overriding the default_render method provided by ActionController::ImplicitRender.

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

Upvotes: 0

Related Questions