Rails forme des redirections pour les nouveaux/créer, de modifier/mettre à jour
Je suis à l'aide de Rails 2.3.8
Je vais avoir un problème avec les actions qui se rendait après une erreur dans un formulaire.
J'ai donc un posts
contrôleur et des actions liées à, index
, new
, create
, edit
, update
, et show
.
Ici sont les actions avec des formulaires PostsController
:
def new
@post = Post.new
# other setup
end
def create
if request.post?
@post= Post.new(params[:post])
# other setup for save
if @post.save
flash[:notice] = 'Post was successfully created.'
redirect_to campaign_path(@post, :redirect => "create")
else
render :action => 'new'
end
end
end
def edit
@post = Post.find(params[:id])
# other setup
end
def update
# setup for save
if @campaign.update_attributes(params[:post])
flash[:notice] = 'Your post was successfully updated.'
redirect_to :action=> "index"
else
render :action => "edit"
end
end
Et voici les formes dans les vues
new.html.erb
:
<% form_for(@post, :html => {:multipart => true}) do |f| %>
<%= f.error_messages %>
# Form fields and stuff
<%= f.submit "Create New Post" %>
<% end %>
edit.html.erb
:
<% form_for(@post, :html => {:multipart => true}) do |f| %>
<%= f.error_messages %>
# Form fields and stuff
<%= f.submit "Update This Post" %>
<% end %>
Mon problème est: Si je suis sur le new
page et que je fais une erreur (par exemple, laissez un champ vide), des vues qui rendent les soumettre à la mauvaise place. Donc, si je démarre sur new
et de soumettre, sans succès, un tas de fois, il me prend successivement dans new
, puis create
, puis edit
, puis update
actions. Si le comportement est:
Commencer la création d'un poste:
Action: new
URI: /posts/new
Vue du rendu: new
Succès de la soumettre à la: show
Échec de soumettre à la: create
Après le premier échec de soumettre:
Action: create
URI: /posts
mauvais?
Vue du rendu: new
Succès de la soumettre à la: index
(ce qui signifie que la forme est la soumission à la update
action, mauvais)
Échec de soumettre à la: edit
mauvais
Après le deuxième échec soumettre:
Action: edit
mauvais, je ne devrais pas être en mesure d'obtenir ici de new
!
URI: /posts/[id]
Vue du rendu: edit
mauvais, je ne devrais pas être en mesure d'obtenir ici de new
!
Succès de la soumettre à la: index
par le biais de la mise à jour
Échec de soumettre à la: update
Après le troisième échec soumet:
Action: update
mauvais, je ne devrais pas être en mesure d'obtenir ici de new
!
URI: /posts/[id]
Vue du rendu: edit
mauvais, je ne devrais pas être en mesure d'obtenir ici de new
!
Succès de la soumettre à la: index
Échec de soumettre à la: update
Je vous en serais reconnaissant si quelqu'un peut m'indiquer ce que je fais mal. Si vous avez besoin d'informations supplémentaires n'hésitez pas.
Merci beaucoup!
Vous devez vous connecter pour publier un commentaire.
Le problème est probablement le code que vous utilisez pour créer votre post (# setup pour sauvegarder). Vous êtes probablement paramètre @poste.id qui est à l'origine de votre nouveau formulaire pour soumettre à mettre à jour au lieu de créer. Le form_for aide vérifie si un enregistrement est nouveau ou pas, si elle est nouvelle alors qu'il se soumet à créer, si elle existe déjà, il se soumet à la mise à jour.
Remarque: Vous n'avez pas besoin de demande de chèque.post? sur votre action de création. L'action de création doit toujours être une requête post.
create
qui est l'essentiel de ce que je fais à mettre en oeuvre pour le sauver, ce qui est@post = Post.new(params[:post])
je fais également uneupdate_attribute
. N'ai-je pas appelerPost.new
pour la sauver? Pour être clair, je ne spécifiez pasid
explicitement nulle part même si je doute que l'on se crée automatiquement à un certain point.merge!
sur les params de hachage quand je fais le nouveau Poste et il fonctionne comme prévu maintenant. Merci beaucoup!Quels sont vos routes à la recherche comme pour cela?
Et que Pan a dit, pas besoin
request.post?
surtout sans unelse
capturer si ce n'est pas unpost?