2012-01-19 78 views
1

我創建在軌自定義MIME類型與respond_to代碼使用在Ruby on Rails中設置自定義mimetypes的視圖格式?

Mime::Type.register_alias "text/html", :modal

我想respond_to代碼使用此MIME類型,像這樣:

respond_to do |format|                                  
    format.html{ render 'index'}                                
    format.modal{ render 'index', :layout => 'bare'}                      
end 

我想這個格式基本服務與.thml格式相同的視圖,但使用不同的佈局

我收到一個缺少的模板錯誤

Missing template support/index with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:modal], :locale=>[:en, :en]} in view paths "/remote/app/views",

其尋找一個名爲index.modal.erb 鑑於我目前僅有index.html.erb

我試圖創建index.modal.erb和它的工作,但隨後佈局具有同樣的問題,我只在bare.html.erb有一個佈局

我真的不想爲不同的MIME類型複製這些視圖文件。我希望能有一種方法讓自定義MIME類型恢復到我錯過的HTML視圖。

+0

到目前爲止,我發現的唯一功能性解決方案是將所有視圖從'view.html.erb'重命名爲'view.erb',這樣軌道不會尋找特定的格式,只是默認值到'view.erb',這在有許多現有視圖文件的項目中不那麼理想。 – kevzettler 2013-08-01 19:20:52

回答

2

我對你的要求去該

我想這種格式基本上作爲html格式,但使用不同的佈局相同觀點

我有不同的方法,應在Rails 3中工作(在Rails 3.2.12中測試)。把你的控制器中的以下內容:

before_filter do 
    @bare= (params[:format] == 'modal') 

    if @bare 
     params[:format]= 'html' 
     request.format= :html 
    end 
    end 

    layout :select_layout 

    # standard controller stuff 

    # ... 
    # Towards bottom of your controller code, 
    private 
    def select_layout 
    @bare ? 'bare' : nil 
    end 

摘要:

這將完全符合您的需要,即與.html具有相同的操作,但具有不同的佈局。

-2

您使用的是哪個版本的Rails?如果3.2,嘗試明確設置格式的模態響應:

respond_to do |format|                                  
    format.html { render 'index'}                                
    format.modal { render 'index', :formats => [:html], :layout => 'bare'}                      
end 

這應該使它呈現index.html.erb代替index.modal.erb的。

+0

不幸的是,該項目是軌道3.0.11。這種解決方案似乎並不奏效。是否在更新的版本中推出? – kevzettler 2012-04-28 02:08:27