2012-01-19 35 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