2011-01-22 219 views
1

我需要渲染一些没有布局的视图。 要跳过线:渲染:布局=>假,如果其他逻辑从控制器行动, 我有自定义MIME类型像phtml(普通html)。rails 3自定义MIME类型 - 默认视图格式

Mime::Type.register "text/phtml", :phtml 

这种格式需要呈现相同的html视图,但只有没有布局。我在应用程序中完成了这一块代码。控制器:

before_filter proc { |controller| 
    if params[:format] && params[:format]=='phtml' 
    controller.action_has_layout = false 
    controller.request.format = 'html' 

    end 
    } 

首先,这是丑陋的,第二我可以没有任何更多的方式控制从控制器格式:

respond_to :phtml,:only=>:index 

,因为它总是渲染视图与请求的格式PHTML。 有没有更好的解决方案?例?我怎样才能查看格式?

感谢很多

+1

我一直以为`.phtml`是PHP/PERL风格的HTML。 – Znarkus 2011-01-22 16:48:40

+0

你是对的。它可以是.plain_html ...这不是重点... – alex 2011-01-22 17:23:14

+0

我也有这个问题,我也需要一种方法来呈现“纯html”。有*必须*是一个很好的方法来做到这一点,肯定会出现很多。我不想重复我所有的控制器操作(不是非常干燥)。我还不知道一个好的解决方案,但是您的信息对我有帮助,谢谢。 – 2011-03-15 06:01:37

回答

1

你可以在你的控制器直接使用layout方法:

class ProductsController < ApplicationController 
    layout "product", :except => [:index, :rss] 
end 

或者使用任何布局:

class ProductsController < ApplicationController 
    layout nil 
end 

退房the guide更多信息。

1

我还没有找到更好的解决办法,只更新到我前面的例子:

before_filter proc { |controller| 
    if params[:format] && params[:format]=='plain_html' && controller.collect_mimes_from_class_level.include?(:plain_html) 
     controller.action_has_layout = false 
     controller.request.format = 'html' 
    end 
    } 

我加入这行来检查是一种新的格式定义为我们的控制器:

controller.collect_mimes_from_class_level.include?(:plain_html) 

现在我们可以有全新的格式,这将使我们的标准html vews而不是构建新格式的新视图。

如果我们不想共享现有的html代码,但基于请求的格式构建不同的逻辑,这可能很有用。

例如,我们可以很容易地准备我们的HTML内容像打印:

class PagesController < ActionController::Base 

layout 'print',:only=>:show 
respond_to :plain_html,:only=>[:show] 

    def show 
    Page.find(1) 
    respond_with @page 
    end 
end 

,并要求将是这样的:

http://www.example.com/pages/1.plain_html 

我希望有人会发现这很有用。

如果你有更好的方法来做到这一点,请与我们分享。

Regards

相关问题