Question

J'ai un static_controller qui est en charge de toutes les pages statiques du site et fonctionne comme suit routes.rb:

map.connect ':id', :controller => 'static', :action => 'show'

J'ai une page statique appelé à ce sujet entre autres, a un formulaire de contact. J'ai actuellement un contacts_controller qui est chargé d'insérer les informations de contact à la base de données. A l'intérieur de mon dossier routes.rb, je:

map.resources :contacts

Mon formulaire de contact (simplifié) ressemble à ceci:

<% form_for @contact do |f| %>
    <p class="errors"><%= f.error_messages %></p>  

    <p>
        <%= f.label :first_name %>
        <%= f.text_field :first_name %>
    </p>


    <p class="buttons"><%= f.submit %></p>
<% end %>

Ce qui soumet à son tour à l'action de créer mon contacts_controller. Mon action de création ressemble à ceci:

def create
    @contact = Contact.new(params[:contact])
    if @contact.save
      flash[:notice] = "Email delivered successfully."
    end
    redirect_to "about"
end

Le problème est, est que lorsque je rediriger ma page à propos des error_messages pour la forme se perdent (depuis les error_messages pour la forme existe pour une seule demande, et cette demande se termine sur redirect). Comment pourrais-je aller de préserver les error_messages et reliant encore les utilisateurs vers l'URL au sujet statique? SUFFIRAIENT une session / flash (si oui, quel code dois-je utiliser pour transmettre des messages d'erreur) ou vais-je sur ce tout ne va pas?

Merci!

Était-ce utile?

La solution

Je pense que ce qui pourrait se passer est que vous devez rendre plutôt que de rediriger. Redirect met fin à la demande, et indique au client de faire une nouvelle demande à une adresse différente. Cela perdre vos erreurs. Si votre tentative de sauvegarde échoue votre besoin pour compléter la demande en rendant l'action à nouveau avec les erreurs affichées.

def create
@contact = Contact.new(params[:contact])
if @contact.save
  flash[:notice] = "Email delivered successfully."
  redirect_to @contact #make a new request for the address of the new record or some other address if you want
else
  render :action => "new" #complete the request by rendering the new action with the @contact variable that was just created (including the @errors).
end
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top