Rails自定义渲染器

我一直在尝试根据Yehuda Katz的博客文章创建一个自定义渲染器。

如果我调用render :my_custom_renderer => "index" ,它可以工作,但它不能用于默认的respond_withformat.my_custom_renderer

我创建了一个简单的例子。

在空白的应用程序中,添加以下行:

在config / mime_types.rb中:

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

在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

Rendering Injection

') end

在app / views / custom_renderer_test / index.my_custom_renderer.erb中:

 

A message "Rendering Injection" should appear above

在app / controllers / custom_renderer_test_controller.rb中:

 class CustomRenderingTestController  'index' } end end end 

最后,在config / routes.rb中:

 root :to => "custom_rendering_test#index" 

启动服务器并转到根页面应显示来自my_custom_renderer的消息,但事实并非如此。 我已经尝试逐步调试Rails源代码,但看起来我不太了解渲染架构。

有人可以给我一个关于问题的提示吗?

可能有帮助的是使用显式方法创建响应器(并使用较新的respond_with ):

 class ActionController::Responder def to_my_custom_renderer controller.render :my_custom_renderer => controller.action_name end end