Was ist der beste Weg, ein statischer Controller in Rails zu routen?
-
24-09-2019 - |
Frage
Ich habe eine static_controller, die verantwortlich für alle statischen Seiten der Website und funktioniert wie in routes.rb folgt:
map.connect ':id', :controller => 'static', :action => 'show'
Ich habe eine statische Seite über die unter anderen Informationen genannt, hat ein Kontaktformular. Im Moment habe ich eine contacts_controller, die zum Einsetzen der Kontaktinformationen in die Datenbank zuständig ist. In meiner routes.rb Datei, die ich habe:
map.resources :contacts
Meine Kontaktformular (vereinfacht) sieht wie folgt aus:
<% 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 %>
Was wiederum legt die Aktion meines contacts_controller erstellen. Erstellen My dieser Aktion aussieht wie:
def create
@contact = Contact.new(params[:contact])
if @contact.save
flash[:notice] = "Email delivered successfully."
end
redirect_to "about"
end
Das Problem ist, ist der, dass, wenn ich umleiten meine über Seite zurück die Error_messages für das Formular verloren gehen (da der Error_messages für das Formular nur für eine Anfrage gibt, und dass die Anfrag Ende auf Redirect). Wie würde ich mich über die Error_messages Erhaltung und die Verknüpfung noch die Benutzer auf die über statische URL zurück? Würde eine Sitzung / flash ausreichend sein (wenn ja, welcher Code würde ich Fehlermeldungen zu übergeben) oder bin ich über diese ganze Sache falsch gehen?
Danke!
Lösung
Ich denke, was könnte los ist, dass Sie eher als Umleitung zu machen brauchen. Redirect beendet die Anforderung und teilt dem Client eine neue Anforderung an eine andere Adresse zu machen. Das wird Ihre Fehler verlieren. Wenn Ihr speichern Versuch fehlschlägt Ihr wollen die Anforderung abzuschließen durch die Aktion wieder mit den Fehlern Rendering gezeigt.
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