2011-01-22 68 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