我正在将我的标准 Rails 应用程序转换为可安装的引擎。该应用程序可与标准博客应用程序相媲美,我希望每个模型、控制器和视图都可以扩展,因此我选择了可挂载引擎。
我使用的其中一个宝石是 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-2.1.0/app/views/devise/sessions/new.html.erb
当然,我可以通过使用我自己的控制器覆盖每个控制器来解决这个问题,就像我对上面的 registrations_controller 所做的那样,但这看起来很丑陋。是否覆盖每个控制器都是这样做的?有没有更方便的方法可以从另一个可安装引擎中覆盖来自可安装引擎的视图?