Aqui está uma before_render
preocupação simples que pode ser usada para executar callbacks logo antes de uma visualização ser renderizada.
Em app/controllers/application_controller.rb
, adicione include BeforeRender
e use before_render
para definir os retornos de chamada.
class ApplicationController < ActionController::Base
include BeforeRender
before_render :set_layout
def set_layout
# ...
end
end
Crie app/controllers/concerns/before_render.rb
e adicione o código abaixo.
module BeforeRender
extend ActiveSupport::Concern
included do
alias_method_chain :render, :before_render_action
define_callbacks :render
end
def render_with_before_render_action(*options, &block)
run_callbacks :render do
render_without_before_render_action *options, &block
end
end
module ClassMethods
def append_before_render_action(*names, &block)
_insert_callbacks(names, block) do |name, options|
set_callback :render, :before, name, options
end
end
def prepend_before_render_action(*names, &block)
_insert_callbacks(names, block) do |name, options|
set_callback :render, :before, name, options.merge(:prepend => true)
end
end
def skip_before_render_action(*names, &block)
_insert_callbacks(names, block) do |name, options|
skip_callback :render, :before, name, options
end
end
alias_method :before_render, :append_before_render_action
alias_method :prepend_before_render, :prepend_before_render_action
alias_method :skip_before_render, :skip_before_render_action
end
end
É isso aí!