我正在创建一个控制器的新版本,
原始控制器: -
class ExampleController < ApplicationController
layout 'filename', only: [:method_name]
...
def method_name
#...some logic...
respond_to do |format|
format.html
format.json {
render json: {}, root: false
}
end
end
...
end
新控制器: -
class V1::ExampleController < ApplicationController
layout 'filename', only: [:method_name]
...
def method_name
#...some logic...
respond_to do |format|
format.html
format.json {
render json: {}, root: false
}
end
end
...
end
我一直收到错误: -
Missing template v1/example/filename, application/filename with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :arb, :haml, :jbuilder]}
其中一个解决方案是创建文件夹结构v1 / example并将我的布局文件放在那里。但我不想创建此文件的重复副本。
另一种方法是使用新旧example_controller的父控制器类,并在那里指定布局(并根据父类的名称具有文件夹结构)。但这将是一个过度杀伤力,而且我计划在所有客户迁移到新版本后删除旧控制器。
我也尝试过像这样指定: -
class V1::ExampleController < ApplicationController
layout 'example/filename', only: [:method_name]
...
end
但这也行不通。
如何告诉我的新控制器从旧文件夹结构中呈现布局。
答案 0 :(得分:1)
format.html {
render template: 'path/to/template'
}
渲染模板
模板渲染就像动作渲染一样,除了它 采用相对于模板根的路径。目前的布局是 自动应用。
# Renders the template located in [TEMPLATE_ROOT]/weblog/show.r(html|xml) (in Rails, app/views/weblog/show.erb)
render :template => "weblog/show"`