Bonjour,
Je suis actuellement entrain de réaliser un "engine" en rails et j'ai un problème qui n'en est plus vraiment un car j'ai réussi à le contourner.
Mais je cherche à savoir la raison du problème et si ma manière de le corriger est la bonne ?
En effet, dans mon, "engine", j'ai un controller qui se nomme "orders_controller" :
class OrdersController < ApplicationController
include ApplicationHelper
include OrdersHelper
include ProductsHelper
Ce controller inclus un helper qui s'appel "ProductsHelper" donc par logique, il y' a un fichier "products_helper" ce qui est bien le cas (products_helper est inclus dans le controller products_controller et fonctionne correctement⁾
ProductsHelper, contient une méthode "test' :
def test
print 'testtt"
end
Si j'appel la méthode test dans une vue du dossier products, tout se passe normalement, par contre, si j'appel la méthode "test" dans une vue du dossier "orders", j'obtiens l'erreur undefined method 'test'.
Pour résoudre ce problème, j'ai du ajouté dans le engine.rb, ce bout de code :
initializer 'orders.helper' do |app|
ActionView::Base.send :include, ProductsHelper
end
Une fois le code ajouté et le serveur redemarré la méthode "test" de ProductsHelper est bien appelé dans mes vues du dossier "orders".
J'ai trouvé cette solution sur le forum de ruby, mais j'aimerais comprendre pourquoi ce problème qui d’après ce que j'ai vu, n'est pas présent dans un projet de type "application" ?
De plus, lorsqu'on modifie un helper qui est utilisé à plusieurs endroits, et qu'on veut voir la modification sur un controller qui n'a pas le même nom (exemple : Modification sur ProductsHelper, visionnage de la modification sur les vues du dossier "Orders") alors dans ce cas là, on est obligé de redémarrer le serveur.
En vous remerciant d'avance.