2009-08-29 5 views
0

Je travaille sur un site Web relativement simple avec (actuellement) une seule ressource. J'ai un formulaire à GET /maps/new qui soumet des données pour une nouvelle carte à POST /maps, qui redirige vers GET /maps/:id après l'achèvement. Le problème ici est que si la validation échoue, il rend le formulaire new-map, donc l'URL est toujours /maps. Mais la redirection vers /maps/new perd les erreurs de validation (et les données de carte précédemment entrées).La soumission du formulaire avec des erreurs affiche le formulaire + erreurs à une URL différente du formulaire original

Ceci est mon premier vrai site Web basé sur Rails, donc je suis sûr que c'est probablement quelque chose de fondamental qui me manque. Voici mes new et create actions, à la fois à peu près inchangé par rapport à l'échafaudage généré:

def new 
    @map = Map.new 

    respond_to do |format| 
    format.html # new.html.erb 
    format.xml { render :xml => @map } 
    end 
end 

def create 
    @map = Map.new(params[:map]) 

    respond_to do |format| 
    if @map.save 
     flash[:notice] = 'Map was successfully created.' 
     format.html { redirect_to(@map) } 
     format.xml { render :xml => @map, :status => :created, :location => @map } 
    else 
     format.html { render :action => 'new' } 
     format.xml { render :xml => @map.errors, :status => :unprocessable_entity } 
    end 
    end 
end 

Comment puis-je obtenir l'URL de rester sur /maps/new pour la forme, mais aussi de maintenir les données de formulaire intermédiaires et des erreurs?

Répondre

0

Est-ce que cela fonctionne pour vous?

def new 
    @map = flash[:map] || Map.new 

...

else 
    flash[:map] = @map 
    format.html { redirect_to new_map_url } 
+0

Il fait! Merci beaucoup! – Twisol

+0

Scratch que, cela ne fonctionne pas lorsque j'essaie d'enregistrer un vrai objet Map comme ça: Je reçois une erreur de débordement de cookie. Dans des circonstances normales, un débordement de cookie serait merveilleux, mais ... La recherche continue. – Twisol

+0

Le problème est que la taille de cet objet est supérieure à 2k. Vous pouvez passer à l'enregistrement p_store ou actif pour stocker vos sessions. –

Questions connexes