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

しかし今、ビューを「ベース」コントローラーのものに集中させたいので、継承コントローラーが呼び出された場合、使用される 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 を手動で設定する方法はありますか?

よろしくお願いします!

4

1 に答える 1

2

くそー、自分で見つけた!

controller_path メソッドを上書きしました。

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

これにより、継承するコントローラーにビューフォルダーの「エディター」が使用されます。

于 2011-03-24T00:55:26.133 に答える