標準の Rails アプリをマウント可能なエンジンに変換中です。このアプリは標準のブログ アプリに匹敵し、すべてのモデル、コントローラー、ビューを拡張可能にしたいので、マウント可能なエンジンを選択しました。
私が使用している宝石の 1 つは Devise です。これは、一種のマウント可能なエンジン自体を理解している限りです。ここに記載されているように、マウント可能なエンジン内で使用できます。
エンジン内で部分的に使用できます。次のようにオーバーライドするいくつかの Devise コントローラーを含め、すべてが正常に機能しています。
# config/routes.rb
Bbronline::Engine.routes.draw do
devise_for :users, class_name: "Bbronline::User", module: :devise,
controllers: { registrations: "bbronline/devise_overrides/registrations"}
...
# controllers/bbronline/devise_overrides/registrations_controller.rb
require_dependency "bbronline/application_controller"
module Bbronline
class DeviseOverrides::RegistrationsController < Devise::RegistrationsController
def new_intermediair
@user = User.new
end
...
正しいビュー「views/bbronline/devise_overrides/registrations/new_intermediair.html.haml」も期待どおりに正しくロードされています。
ただし、私の問題は、カスタム コントローラーなしでオーバーライドしたビューが正しく読み込まれないことです。たとえば、ログインビューが配置されているはずのビューがviews/bbronline/devise/sessions/new.html.haml
ロードされていません。代わりに、標準の Devise ログイン ビューが読み込まれます。devise-2.1.0/app/views/devise/sessions/new.html.erb
もちろん、上記の registrations_controller で行ったように、すべてのコントローラーを独自のコントローラーでオーバーライドすることでこの問題を解決できますが、これは非常に見苦しく見えます。これを行う方法は、すべてのコントローラーをオーバーライドすることですか? 別のマウント可能なエンジン内からマウント可能なエンジンからのビューをオーバーライドするより便利な方法はありますか?