Comment puis-je faire des itinéraires à partir d'une de Rails 3, moteur disponible à l'accueil de l'application?
J'ai un Rails 3 avec plusieurs moteurs contenant des fonctionnalités supplémentaires. Chaque moteur est un service distinct que les clients peuvent acheter de l'accès à l'.
Je suis, cependant, avoir un problème avec les routes par les moteurs qui ne sont pas facilement disponibles pour les contrôleurs et les vues.
contrôleur:
class ClassroomsController < ApplicationController
..
respond_to :html
def index
respond_with(@classrooms = @company.classrooms.all)
end
def new
respond_with(@classroom = @company.classrooms.build)
end
..
end
app/views/classrooms/new.html.haml
:
= form_for @classroom do |f|
..
f.submit
config/routes.rb
moteur:
MyEngineName::Engine.routes.draw do
resources :classrooms
end
config/routes.rb
dans app:
Seabed::Application.routes.draw do
mount MyEngineName::Engine => '/engine'
...
end
lib/my_engine_name.rb
moteur:
module MyEngineName
class Engine < ::Rails::Engine
end
end
de tenter d'aller à /classrooms/new
résultats dans
NoMethodError in Classrooms#new
Showing app/views/classrooms/_form.html.haml where line #1 raised:
undefined method `hash_for_classrooms_path' for #<Module:0x00000104cff0f8>
et tente d'appeler classrooms_path
partir de n'importe quel autre point de vue, les résultats dans la même erreur.
Je peux, cependant, l'appel MyEngineName::Engine.routes.url_helpers.classrooms_path
et le faire fonctionner. Je suis en train de penser que je pourrais avoir défini les routes de mal, mais ne peut pas trouver un autre moyen qui fonctionne.
Essayé de lancer l'application avec les deux Passagers (autonome et module Apache) et WEBrick (serveur rails). En utilisant les dernières Rails à partir de Git (7c920631ec3b314cfaa3a60d265de40cba3e8135
).
Vous devez vous connecter pour publier un commentaire.
Changement
config.routes
dans votre moteur de:La façon dont vous l'avez, les routes ne sont disponibles que dans la
MyEngineName::Engine
espace de noms et pas dans le reste de l'armée application rails.Il y avait un post de blog avec plus d'informations, mais malheureusement il n'est plus disponible:
scope '/engine' do
) et tout fonctionne. Merci beaucoup 🙂map
paramètre pour le bloc (il suffit de retirer la totalité de la|map|
partie).J'ai eu le même problème, et trouvé dans la la documentation:
Puisque vous pouvez maintenant monter un moteur à l'intérieur de l'application des routes, vous n'avez pas un accès direct à Moteur url_helpers à l'intérieur de l'Application. Lorsque vous montez un moteur dans une application de routes, un helper est créé pour vous permettre de le faire. Envisager un tel scénario:
Maintenant, vous pouvez utiliser le my_engine helper à l'intérieur de votre demande:
classrooms_path
de l'intérieur du Moteur?Pour moi aussi vous aider à ajouter des
à mon principal joyau de fichier (lib/.rb).
Bon exemple - https://github.com/mankind/Rails-3-engine-example/blob/master/lib/dummy.rb