Rails Custom Renderer

He estado tratando de crear un renderizador personalizado basado enesta publicación de blog de Yehuda Katz.

Funciona si llamo arender :my_custom_renderer => "index", pero no funciona con la @ predeterminarespond_with oformat.my_custom_renderer

Creé un ejemplo simple,.

Desde una aplicación en blanco, agregue las siguientes líneas:

In config / mime_types.rb:

Mime::Type.register_alias 'text/html', :my_custom_renderer

In config / my_custom_renderer.rb:

require "action_controller/metal/renderers"
ActionController.add_renderer :my_custom_renderer do |template, options|
  self.mime_type ||= Mime::HTML
  self.response_body = render_to_string(template).sub(/^/, 
                                                '\1<h1>Rendering Injection</h1>')
end

In app / views / custom_renderer_test / index.my_custom_renderer.erb:

<h1>A message "Rendering Injection" should appear above</h1>

In app / controllers / custom_renderer_test_controller.rb:

class CustomRenderingTestController < ApplicationController
  def index
    respond_to do |format|
      # does not go through my custom renderer!
      format.my_custom_renderer 
      # although it works if I explicitly do:
      # format.my_custom_renderer { render :my_custom_renderer => 'index' }
    end
  end
end

Y, finalmente, en config / routes.rb:

root :to => "custom_rendering_test#index"

Iniciar un servidor e ir a la página raíz debería mostrar el mensaje de my_custom_renderer, pero no es así. He intentado depurar la fuente de Rails paso a paso, pero parece que no entiendo la arquitectura de representación lo suficientemente bien.

¿Puede alguien darme una pista sobre cuál es el problema?

Respuestas a la pregunta(1)

Su respuesta a la pregunta