2011-01-25 11 views
16

Come posso inviare il modulo con il link sul formato corretto di rail 3? Grazie.Rails 3 modulo di invio con link

<%= form_for @post do |f| %> 
<%= f.label :title %><br> 
<%= f.text_field :title %> 
<p><%= f.submit %></p> 
<% end %> 

Esempio di codice.

+0

Aggiungere codice di avvio può essere ottimo – shingara

+0

Aggiunto un esempio di codice. –

risposta

13

"Corretto" è una parola complicata in questo contesto;). Ci si potrebbe chiedere perché non si stia semplicemente prendendo un elemento button e lo si faccia apparire come un collegamento?

In ogni caso, non è possibile ottenere ciò con un semplice codice HTML (almeno non a mia conoscenza). Con un framework Javascript come ad es. jQuery si può semplicemente fare qualcosa di simile:

$('a').click(function(){ 
    $('form').submit(); 
    return false; 
}); 

Rails 2.3.x aveva un link_to_remote aiutante che consentono di specificare un parametro :submit (= ID dell'elemento DOM, di default è il form padre). Quindi sei stato in grado di scrivere:

link_to_remote 'submit', :url => {…}, :submit => "my_form" 

Ma con la spinta di Rails 3 verso UJS, questo helper non c'è più.

+0

Il collegamento dell'articolo è rotto/dirottato per gli annunci. –

+1

Rimosso il collegamento. – polarblau

5

In Rails 3, l'aiutante link_to_remote è andato, ma è sostituito con

link_to 'submit me', url_for(@post), {:remote => true, :class => 'submit_me'}

Nel tuo caso, è probabile che desidera che il modulo per fare l'AJAX, in questo modo:

<%= form_for @post, :remote => true do |f| %> 
    <%= f.label :title %><br> 
    <%= f.text_field :title %> 
    <p><%= f.submit %></p> 
<% end %> 

con un link companion:

link_to 'submit me', '#', :class => 'submit_me' 

Quindi, in un file .js incluso nel corpo della pagina:

$('.submit_me').click(function() { 
    $('form').submit(); 
    return false; 
}); 

L'idea è che qualcosa di più complicato di trasformare un link o forma in una richiesta AJAX dovrebbe essere fatto con i callback jQuery, come elencato qui:

https://github.com/rails/jquery-ujs/wiki/ajax

E se si vuole ottenere davvero in richieste AJAX interattive, go here for a great 2-part article on it.

7

con jQuery, questo uno-liner funziona bene per un semplice modulo.

<%= link_to t("translate.submit"), "#", class: "make it beautiful", :onclick=>"$('form').submit()" %> 

Naturalmente non c'è bisogno davvero di usare jQuery, solo trovare l'elemento dom per il modulo funzionerà bene pure.

<%= link_to t("translate.submit"), "#", class: "make it beautiful", :onclick=>"document.getElementById('your_form_id').submit()" %> 

In questo modo non si usa alcun ajax, solo il modulo semplice invia.

+0

Ho usato questo approccio e funziona bene. Sebbene, potresti voler aggiungere un 'return false'; alla fine di: onclick per garantire che il collegamento non venga seguito. –

13

è possibile aggiungere quanto segue per l'assistente di applicazione:

def link_to_submit(text) 
    link_to_function text, "$(this).closest('form').submit()" 
end 

poi dentro i file vista si può chiamare

link_to_submit 'Submit Form' 

E il link deve essere figlio del modulo.

+0

Bello! Non sapevo nemmeno che esistesse. – Jurgen

+0

Molto bello! Questo funziona sicuramente alla grande! – RubyFanatic

+0

Per le persone che sono venute qui da Google, guarda sotto per un miglioramento che ho trovato su questa risposta. – Jazz

29

Per le persone che sono venute qui tramite Google, ho un miglioramento sulla risposta di Zequez. Invece del metodo che egli dà, aggiungere questo metodo per l'helper applicazione invece:

def link_to_submit(*args, &block) 
    link_to_function (block_given? ? capture(&block) : args[0]), "$(this).closest('form').submit()", args.extract_options! 
end 

Poi, come detto Zequez, per i collegamenti semplici si può solo fare questo a suo avviso:

<%= link_to_submit 'Submit Form' %> 

. ..e per i pulsanti più complicati è possibile passare le opzioni HTML e un blocco da utilizzare all'interno del collegamento. Se si utilizza Twitter Bootstrap, per esempio, questo consente di aggiungere classi CSS, la formattazione e le icone:

<%= link_to_submit(class: 'btn btn-primary') do %> 
    <strong>Submit</strong> the Form <i class="icon-arrow-right"></i> 
<% end %> 

Il codice JQuery funzionerà fino a quando il collegamento è un figlio del modulo (cioè, fino a quando link_to_submit viene chiamato da qualche parte all'interno del blocco form_for).

+2

Beh, questo è davvero un aiuto più solido. – Zequez

+0

Sì, beh, non l'avrei capito senza la tua risposta. Il jQuery e l'esistenza di 'link_to_function' sono tutti voi. – Jazz

+0

Questo è eccellente! Grazie. – Patrick

Problemi correlati