2009-01-20 5 views
12

Ich versuche, eine Rails-Anwendung zu schreiben, mit der Sie auf eine bestimmte Seite gehen, sagen/Person /: ID. Auf dieser Seite wird eine Reihe verfügbarer Ressourcen angezeigt. Ich möchte, dass jede Ressource eine Schaltfläche daneben hat, die diese Ressource für diese Person reserviert (indem sie eine neue Instanz eines Zuordnungsmodells erstellt). Als Erweiterung möchte ich mehrere Schaltflächen für jede Ressource, die Reservierungen abbrechen und tun andere Dinge. Ich möchte auch Daten neben einigen der Schaltflächen eingeben, z. um einige% einer Ressource zuzuordnen.Mehrere senden Schaltflächen/Formulare in Rails

Mein Problem ist, dass ich nicht herausfinden kann, wie ich dies vernünftig tun kann, ohne mich selbst zu wiederholen oder einen sehr hacky Controller zu haben. Wie kann ich dies tun, ohne auf den Wert Teil der Übermittlungsschaltflächen (der Text auf den Knöpfen) oder irgendein Javascript zu vergleichen?

Wenn Sie zwei Formulare auf einer Seite haben, wie richten Sie sie ein, damit Änderungen an beiden Formularen gespeichert werden, wenn auf die Schaltfläche zum Senden geklickt wird?

Antwort

1

Machen Sie jede Zeile in der Liste zu einem Formular und legen Sie dort die Informationen über den betreffenden Artikel ab. Natürlich müssen Sie die Seite mit jeder Aktion einreichen und neu laden. Der einzige Weg um dies zu tun ist, Checkboxen anstelle von Schaltflächen zu verwenden und es zu einer großen Form zu machen - oder Javascript zu verwenden.

Wie für Ihre zweite Frage, wenn Sie einen Absenden Button zwei "Formen" beeinflussen möchten, sollten Sie beide Teil des gleichen Formulars machen. Sie können mehrere Übermittlungsschaltflächen im Formular haben, wenn Sie dies benötigen. Andernfalls könnten Sie dynamisch ein drittes Formular mit Javascript generieren, das mit den Werten des ursprünglichen Formulars gefüllt ist - aber das würde nicht immer funktionieren (z. B. Dateieingaben).

5

im jQuery verwenden, und das ist, was ich tat:

<script type="text/javascript"> 
    $(document).ready(function() { 

     $('#bulk_print').click(function(){ 
      var target = '<%= bulk_print_prepaid_vouchers_path(:format => :pdf) %>'; 
      $('#prepaidvoucher_bulk_print').attr('action', target); 
      $('#prepaidvoucher_bulk_print').submit(); 
     }); 

     $('#bulk_destroy').click(function(){ 
      var target = '<%= bulk_destroy_prepaid_vouchers_path %>'; 
      $('#prepaidvoucher_bulk_print').attr('action', target); 
      $('#prepaidvoucher_bulk_print').submit(); 
     }); 

    }); 
</script> 

<% form_tag '#', :method => :post, :id => 'prepaidvoucher_bulk_print' do %> 

your form details 

<button class="button" type="submit" id="bulk_print"> 
    <%= image_tag("web-app-theme/printer.png", :alt => "Print Selected Vouchers") %> Print Selected Vouchers 
</button> 

<button class="button" type="submit" id="bulk_destroy"> 
    <%= image_tag("web-app-theme/cross.png", :alt => "Delete Selected Vouchers") %> Delete Selected Vouchers 
</button> 

<% end %> 

Die Idee ist, die Form Aktion on the fly zu ändern, basierend auf welche Schaltfläche geklickt wird