0

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

# 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

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

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

我查看了 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?

非常感谢提前!

4

1 回答 1

2

该死的我自己找到的!

我刚刚覆盖了 controller_path 方法:

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

这将永远使用任何继承控制器的视图文件夹“编辑器”。

于 2011-03-24T00:55:26.133 回答