Je suis dans le processus de conversion de mon application Rails standard à un moteur montable. L'application est comparable à une application de blogs standard et je veux que chaque modèle, contrôleur et vue soit extensible d'où mon choix pour un moteur montable. L'une des pierres précieuses que j'utilise est Devise qui est aussi loin que je comprends une sorte de moteur montable lui-même. Il peut être utilisé à l'intérieur d'un moteur montable comme indiqué here.Rails montable moteur et dépassant un autre moteur
Je peux l'utiliser partiellement dans mon moteur. Tout fonctionne très bien, y compris certains contrôleur i Override comme Concevoir celui-ci:
# 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
...
La vue correcte « vues/bbronline/devise_overrides/enregistrement/new_intermediair.html.haml » est également chargé correctement comme prévu.
Cependant, mon problème est que les vues que je redéfinis sans un contrôleur personnalisé ne sont pas correctement chargées. Par exemple, la vue qui doit être la vue de connexion se trouve dans views/bbronline/devise/sessions/new.html.haml
et n'est pas chargée. Au lieu de cela, la vue de connexion Devise standard est chargée, c'est-à-dire devise-2.1.0/app/views/devise/sessions/new.html.erb
Bien sûr, je pourrais résoudre ce problème en remplaçant chaque contrôleur par mon propre contrôleur comme je l'ai fait avec le registrations_controller ci-dessus mais cela semble très moche. Est-ce que le remplacement de chaque contrôleur est le moyen de le faire? Existe-t-il un moyen plus pratique de remplacer les vues d'un moteur montable à partir d'un autre moteur montable?
De toute façon je pourrais faire ce changement sans avoir à changer la configuration de mon application fictive? Je préférerais en faire le comportement par défaut chaque fois que je chargerai ma gemme. – Ajedi32