установка "view-name" контроллера - PullRequest
0 голосов
/ 24 марта 2011

Я хотел бы централизовать аналогичные действия некоторых контроллеров и написать контроллер, от которого наследуются другие контроллеры.Это прекрасно работает.

# 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

Но теперь я хотел бы централизовать представления для базового, так что если вызывается наследующий контроллер, то используется 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 Ответ

2 голосов
/ 24 марта 2011

Блин, я нашел это сам!

Я просто переписал метод controller_path:

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

это будет когда-либо использовать 'редактор' папки просмотра для любого наследуемого контроллера.

...