2010-12-09 32 views
1

Dans mon application Rails3 ajouter un match spécifique pour edit mon modèle Post comme:Rails: actions Render dans un chemin spécifique

match '/edit' => 'posts#edit', :as => 'post_edit' 

Alors, je remplacer le chemin par défaut de l'action edit. - Maintenant, si des erreurs se produisent dans l'action update, l'action edit sera affichée avec la définition du chemin de l'URL avec le chemin edit par défaut /posts/1.

Comment puis-je remplacer cela pour afficher l'action edit avec la définition du chemin d'accès URL comme /edit au lieu de posts/1.

Répondre

0

Vous voyez réellement l'URL de "mise à jour", le chemin par défaut pour l'édition serait /posts/1/edit. Je ne pense pas que vous serez en mesure de changer ce que l'URL affiche en utilisant render :action. Une autre méthode, quoique quelque peu bâclée, consisterait à rediriger et enregistrer l'objet @post dans la session ou dans la mémoire flash. Si vous n'enregistrez pas l'objet @post, vous perdrez les messages d'erreur de la mise à jour.

if @post.update_attributes(params[:post]) 
    #business as usual 
else 
    session[:post] = @post 
    redirect_to post_edit(@post) 
end 

Notez qu'il est une mauvaise pratique pour sauver tout l'objet de la session (en particulier les gros objets), vous voudrez peut-être au lieu d'envoyer uniquement la chaîne de message d'erreur avec le flash et rendre que dans la vue. Ce sont deux méthodes plutôt hackish, mais je ne vois pas vraiment une manière élégante de faire ceci. Par curiosité, pourquoi voulez-vous changer l'URL par défaut? Est-ce nécessaire?

+1

En fait, l'URL serait '/ posts/1/edit' – nathanvda

+0

en fait, vous avez raison ;-) Merci d'avoir attrapé ça! réponse mise à jour – johnmcaliley