Domanda

Ho uno static_controller che si occupa di tutte le pagine statiche del sito e funziona come segue in routes.rb:

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

Ho una pagina statica chiamato a tale proposito tra le altre informazioni, ha un modulo di contatto. Al momento ho un contacts_controller che si occupa di inserire le informazioni di contatto nel database. Dentro il mio file routes.rb, ho:

map.resources :contacts

Il mio modulo di contatto (semplificato) assomiglia a questo:

<% 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 %>

Che a sua volta si sottomette alla creazione di azione del mio contacts_controller. I miei creare look d'azione come questo:

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

Il problema è, è la che quando ho reindirizzare indietro alla mia pagina sulle messaggi_errore per la forma si perdono (dal momento che i messaggi_errore per la forma esistono solo per una richiesta, e che la richiesta estremità su reindirizzamento). Come potrei fare per preservare i messaggi_errore ed ancora che collega gli utenti all'URL di statico? Sarebbe una sessione / flash essere sufficiente (in caso affermativo, quale codice dovrei usare per passare i messaggi di errore) o sto andare su questo tutta la cosa sbagliata?

Grazie!

È stato utile?

Soluzione

Credo che quello che potrebbe essere in corso è necessario per eseguire il rendering piuttosto che di reindirizzamento. Redirect termina la richiesta, e dice al cliente di fare una nuova richiesta a un indirizzo diverso. Che perderà i vostri errori. Se il tentativo fallisce salvare la vostra voglia di completare la richiesta rendendo nuovamente l'azione con gli errori indicati.

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top