设置控制器的“视图名称”

时间:2011-03-24 00:48:20

标签: ruby-on-rails-3 controller actionpack

我想集中一些控制器的类似操作,并编写一个控制器,其他控制器从中继承。这很好。

# calling Configurations#index will render configurations/index.html.erb
# while 'configurations' being the internal controller_path used to look for the view
class ConfigurationsController < EditorController
end

class EditorController < ApplicationController
 def index
  render 'index'
 end
end

但是现在我想将视图集中到“base”控制器中,所以如果调用一个继承控制器,则使用的controller_path应该是基本控制器的。

有没有办法重写控制器名称或controller_path?

我查看了AbstractController :: Base的源代码并找到了(第90行)

def controller_path
  @controller_path ||= name.sub(/Controller$/, '').underscore unless anonymous?
end

所以我只需要从我的基本控制器设置@controller_path不是吗?这不会改变任何事情:

#just does the same as above
class EditorController < ApplicationController
 @controller_path = 'editor'
 def index
  render 'index'
 end
end

那么有没有办法手动设置controller_path?

非常感谢提前!

1 个答案:

答案 0 :(得分:2)

该死的我自己找到了它!

我刚刚覆盖了controller_path方法:

class EditorController < ApplicationController
 def controller_path
  'editor'
 end
 #...
end

这将使用视图文件夹'editor'作为任何继承控制器。