我正在将我的标准Rails应用程序转换为可安装引擎的过程。该应用程序可与标准博客应用程序相媲美,我希望每个模型,控制器和视图都可扩展,因此我选择了可安装的引擎。Rails可安装引擎并覆盖另一引擎
我使用的宝石之一是据我了解一种可安装引擎本身的设计。它可以在可安装的发动机内使用,如here所述。
我可以在我的引擎中部分使用它。一切工作正常,包括一些设计控制器我重写像这样的:
# 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
...
正确的观点的意见/ bbronline/devise_overrides /注册/ new_intermediair.html.haml'也正确加载预期。
但是,我的问题是,我没有自定义控制器重写的视图没有正确加载。例如,如果登录视图位于views/bbronline/devise/sessions/new.html.haml
且未加载视图。相反,标准设计登录视图被加载,即devise-2.1.0/app/views/devise/sessions/new.html.erb
当然,我可以通过用我自己的控制器覆盖每个控制器来解决这个问题,就像我对上面的registrations_controller所做的那样,但这看起来非常难看。要实现这个目标,每个控制器都在重写?是否有更方便的方法来从另一个可挂载引擎中覆盖可挂载引擎的视图?
任何方式我可以做这个改变,而不必改变我的虚拟应用程序的配置?我更喜欢在加载我的宝石时将其设置为默认行为。 – Ajedi32