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!

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top