2010-11-03 7 views
1

Dans une application rails, j'ai une URL (ou un profil) que je mappe sur le contrôleur utilisateur pour permettre à un utilisateur de voir et de modifier son profil. J'ai fait les entrées suivantes dans mon fichier de route de sorte que le "get" pour le profil me conduise à l'action de profil dans le contrôleur d'utilisateur et le "poste" pour le profil dirigera vers l'action update_profile dans le contrôleur d'utilisateur.Problème de routage Rails

match '/profile', :to => 'users#profile', :via => "get" 
match '/profile', :to => 'users#update_profile', :via => "post" 

Si je lance routes râteau je vois les deux entrées suivantes

profile GET /profile(.:format) {:controller=>"users", ":action=>"profile"} 
profile POST /profile(.:format) {:controller=>"users", ":action=>"update_profile"} 

Si je tente de frapper l'url dev http://localhost:3000/profile il affiche la page de profil comme prévu. Si j'appuie sur le bouton de formulaire, il me donne l'erreur suivante:

Routing Error 

No route matches "/profile" 

En regardant le code HTML généré sur la première page je vois la balise formulaire ci-dessous, il semble que l'action se déroule correctement.

<form accept-charset="UTF-8" action="/profile" class="edit_user" enctype="multipart/form-data" id="edit_user_1" method="post"> 

Alors, qu'est-ce qui me manque? En regardant les sorties de rake routes, je supposais que cela fonctionnerait tel quel. Est-ce que je pense incorrectement à mes verbes http? Toute aide serait appréciée.

Répondre

0

Je vois quelques problèmes ici.

D'abord, ce sont des actions pour un utilisateur spécifique. Donc, la route devrait probablement être 'profile/:id'

Deuxièmement, show et update sont générés automatiquement lorsque vous créez une ressource. Quel est l'avantage de renommer les actions et de les mapper aux URL personnalisées? Briser les routes Rails RESTful générées automatiquement demande souvent des problèmes. Cela peut être fait, mais vous devriez avoir une bonne raison de le faire. Troisièmement, vos itinéraires me semblent amusants. Il y a des citations où elles ne devraient pas l'être. Est-ce ainsi qu'ils apparaissent dans votre console lorsque vous exécutez des routes rake?

+1

Le concept du/profil est que c'est bon pour l'utilisateur actuel, si vous n'êtes pas connecté au système, vous ne serez pas autorisé à accéder à la page, donc pas besoin de: id dans ce cas. Nous utilisons les URL générées pour le contrôleur d'utilisateur pour les capacités d'administration qui sont une expérience utilisateur différente de celle que nous voulons qu'un utilisateur ait pour son propre profil. L'action d'édition est donc utilisée par un administrateur système pour éditer un utilisateur existant dans lequel l'action du profil doit fournir une expérience différente personnalisée à l'utilisateur actuellement connecté. Oui, c'est comme ça qu'il apparaît dans la console. –

+1

Cela fait beaucoup plus de sens. Dans ce cas, la seule chose qui me semble drôle est les routes réelles. Il ne devrait pas y avoir de citation avant: action, n'êtes-vous pas d'accord? La seule chose que je peux penser à essayer est d'utiliser systématiquement des guillemets doubles. Dans vos itinéraires, vous avez des guillemets simples autour de certaines chaînes et des guillemets autour d'autres. Cela ne devrait pas faire de différence, mais ça vaut le coup d'essayer. – Samo