我正在rails中创建一个自定义mimetype以与respond_to一起使用
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 :(得分: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相同的动作但具有不同的布局。
答案 1 :(得分:-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。