ProjectsController
というコントローラーがあります。そのアクションは、デフォルトでapp/views/projects
内のビューを探します。コントローラーのすべてのメソッド(index
、show
、new
、edit
など...)のパスを変更したいと思います。
例えば:
class ProjectsController < ApplicationController
#I'd like to be able to do something like this
views_path 'views/mycustomfolder'
def index
#some code
end
def show
#some code
end
def new
#some code
end
def edit
#some code
end
end
各メソッドをrender
で変更するのではなく、それらすべてのデフォルトパスを定義することに注意してください。これは可能ですか?もしそうなら、どうですか?
ありがとうございました!
このための組み込みメソッドがない場合は、そのコントローラーのrender
をオーバーライドできますか?
class MyController < ApplicationController
# actions ..
private
def render(*args)
options = args.extract_options!
options[:template] = "/mycustomfolder/#{params[:action]}"
super(*(args << options))
end
end
これが実際にどれほどうまく機能するか、またはまったく機能するかどうかはわかりません。
ActionView :: ViewPaths :: ClassMethods#prepend_view_path を参照してください。
class ProjectsController < ApplicationController
prepend_view_path 'app/views/mycustomfolder'
...
あなたはあなたのコントローラーの中でこれを行うことができます:
def self.controller_path
"mycustomfolder"
end
次のようなものを追加できます。
paths.app.views << "app/views/myspecialdir"
config/application.rbファイルでRailsビューテンプレートを別のディレクトリで検索します。注意点の1つは、コントローラに一致するビューファイルを引き続き検索することです。そのため、ビューの上記の構成を持つHomeControllerという名前のコントローラーは、レンダリングする「app/views/myspecialdir/home/index.html.erb」という名前の何かを探します。
すべてのビューのデフォルトパスをアプリレベルで変更したい場合は、次のようにします-
class ApplicationController < ActionController::Base
before_action :set_views
private
def set_views
prepend_view_path "#{Rails.root.join('app', 'views', 'new_views')}"
end
end
そして、すべてのビューをnew_views
フォルダーに、オリジナルと同じディレクトリー構造に従って書き込みます。
追伸-この回答は @ mmell の回答から発想を得たものです。