Je suis confronté au problème suivant: dans mon application, j'utilise des moteurs. Disons que j'ai un moteur de magasin. Dans ce moteur de magasin j'ai deux contrôleurs: carts_controller et products_controller et leurs aides: carts_helper et products_helper.Erreur de méthode non définie pour la méthode d'assistance sur la vue dans les rails Moteur
Maintenant sur ma vue views/shop/products/index.html.erb
, j'essaie d'appeler la méthode cart_action qui est définie dans helpers/shop/carts_helper.rb
. Cependant, malheureusement, je reçois un undefined method `cart_action' for #<#<Class:0x007fb3627af090>:0x007fb3627aab08>
quand je fais cela. Lorsque je place la même méthode dans helpers/shop/products_helper.rb
je ne reçois pas ce message et la méthode fonctionne bien .... Pourquoi ne puis-je pas utiliser la méthode de carts_helper, mais puis-je utiliser la méthode de products_helper? Dans une application de rails normale, je peux utiliser n'importe quelle méthode d'assistance sur n'importe quelle vue, non?
Il pourrait devoir faire quelque chose avec l'espace de nommage-à-dire les fichiers d'aide ne sont pas en helpers
mais helpers/shop
cependant this helps prevent conflicts with helpers from other engines or apps...
module Shop
module CartsHelper
def cart_action(package_id)
#some code
end
end
end
Comment je l'appelle sur shop/products/index.html.erb
:
<%= cart_action(package['id']) %>
Aurait-il à faire avec le fait que j'hérite des fonctionnalités pour mes applications_controller de mon application principale ?:
class Shop::ApplicationController < ApplicationController
end
au lieu de
module Shop
class ApplicationController < ActionController::Base
end
end
FWIW mes itinéraires pour ce moteur ressemble à:
Shop::Engine.routes.draw do
resources :products, only: [:index]
# shopping cart
resource :cart, only: [:show] do
put 'add/:package_id', to: 'carts#add', as: :add_to
put 'remove/:package_id', to: 'carts#remove', as: :remove_from
end
end
Merci pour toute aide à l'avance!
Remarque: Je ne souhaite pas utiliser ma méthode d'assistance dans mon application principale, mais uniquement sur une autre vue du même moteur.
Merci @MarcusTres, appris quelque chose de nouveau aujourd'hui :) J'ai trouvé deux autres options qui fonctionnent pour moi aussi, voir [ma réponse] (http://stackoverflow.com/a/29734454/3519981). – PSR