Quelle est la meilleure façon d'acheminer un contrôleur statique dans Rails?
-
24-09-2019 - |
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!
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