Je vais commencer par le fait que je suis nouveau sur RoR. J'ai une classe qui réside dans un module imbriqué, ::Physical::Users::User
. Le code est organisé en chemins tels que app \ controllers \ physical \ users.Itinéraires de module imbriqués incorrects
Mon problème vient quand je tente d'utiliser form_for
comme ceci:
<% form_for @user do |f| %>
...
<% end %>
Je reçois l'erreur ActionView::TemplateError undefined method 'physical_users_users_path'
Je comprends que cela a à voir avec des rails attendent des itinéraires qui ne correspondent pas à la mienne. Pour que mon application fonctionne de telle sorte que la ressource: users accède directement au bon répertoire (pour que je n'ai pas besoin d'utiliser http: \ myurl.com \ physical \ users \ users \ 1 ', je mets ce qui suit dans mon dossier routes.rb:
map.resources :users, :controller => 'physical/users/users'
Quand je lance « > routes râteau » Je reçois le texte suivant:
users GET /users(.:format) {:controller=>"physical/users/users", :action=>"index"}
POST /users(.:format) {:controller=>"physical/users/users", :action=>"create"}
new_user GET /users/new(.:format) {:controller=>"physical/users/users", :action=>"new"}
edit_user GET /users/:id/edit(.:format) {:controller=>"physical/users/users", :action=>"edit"}
user GET /users/:id(.:format) {:controller=>"physical/users/users", :action=>"show"}
PUT /users/:id(.:format) {:controller=>"physical/users/users", :action=>"update"}
DELETE /users/:id(.:format) {:controller=>"physical/users/users", :action=>"destroy"}
/:controller/:action/:id
/:controller/:action/:id(.:format)
est-il un moyen de maintenir l'URL plus courte à ma ressource utilisateur et obtenir form_for
à chercher le bon chemin?
Encore une fois, je suis nouveau, donc s'il y a quelque chose qui me manque dans cette explication, faites le moi savoir!
-
En réponse aux réponses ci-dessous, le dispositif de commande réside dans app/controllers/physique/users/users_controller.rb.
Modification du routage à utiliser les espaces de noms comme:
map.namespace :physical do |physical|
physical.namespace :users do |users|
users.resources :users
end
end
génère des itinéraires qui sont compatibles avec ce que form_for
cherche, mais je perds la possibilité d'utiliser l'URL http: \ mysite.com \ users \ 1.
Merci pour l'aide jusqu'à présent!
Pouvez-vous expliquer le raisonnement de votre contrôleur étant nommé: controller => "physique/users/users"? - Normalement, ce ne serait que "utilisateurs" –
Aussi - quel est le chemin d'accès complet à votre fichier users_controller? est-ce /app/controllers/physical/users_controller.rb? ou est-ce /app/controllers/physical/users/users_controller.rb? –
Je suis [Enterprise Rails] (http://oreilly.com/catalog/9780596515201) par Dan Chak.La couche physique indique les classes qui interagissent avec les modèles de base de données physiques, tandis que celles de la couche logique traitent des classes construites au-dessus de la logique métier, etc. –