在命名空间控制器中指定布局

时间:2016-04-24 16:40:49

标签: ruby-on-rails ruby ruby-on-rails-4

我正在创建一个控制器的新版本,

原始控制器: -

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

但这也行不通。

如何告诉我的新控制器从旧文件夹结构中呈现布局。

1 个答案:

答案 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"`

请参阅reference for #render