2009-12-01 5 views
1

J'essaie de remplacer une action dans un contrôleur défini par un moteur Rails.Ai-je besoin d'un fichier d'origine pour remplacer le contrôleur de Rails Engine?

Il semble que je dois exiger que le fichier d'origine avant la réouverture de la classe, comme ceci:

require File.join(RAILS_ROOT, 'vendor/plugins/myplugin/app/controllers/some_controller') 
class SomeController 

    def index 
    render :text => 'this is my index' 
    end 
end 

Cela est logique, mais qui nécessitent est assez laid. Y at-il une sorte de magie Rails qui me permettrait d'éviter le besoin initial?

+0

Vous pouvez le faire en changeant automatiquement 'ActiveSupport # require_or_load', voir http://stackoverflow.com/questions/5045068/extending-controllers-of- a-rails-3-moteur-dans-l'application principale – Andrei

Répondre

1

Ceci est une estimation complète ...

semble plus d'un problème de synchronisation de charge. Comme dans, votre fichier est chargé avant le plug-in. Où se situe votre action? config/initialiseurs? lib?

Je ne suis pas sûr quand Rails Engines est chargé donc jouer avec l'emplacement (devrait travailler en le mettant dans lib).

Ou, mieux encore, créez votre propre plug-in avec les modifications et assurez-vous qu'il charge après l'original.

Et vous voulez probablement quelque chose comme:

SomeController.class_eval do 

    def index 
    ... 
    end 

end