8 Stimmen

2 Absende-Schaltflächen in einem Formular

Ich habe eine Frage zu Formularen. Ich habe ein ziemlich standardisiertes Formular, das einen Beitrag (in meiner Anwendung eReport genannt) mit einem Titel und einem Text speichert. Die Tabelle hat auch ein Feld "veröffentlicht", das boolesch ist. Der gespeicherte eReport wird auf der öffentlichen Website nur angezeigt, wenn dieses Feld auf true gesetzt ist, wobei false die Standardeinstellung ist.

Anstelle des standardmäßigen Kontrollkästchens möchte ich am Ende des Formulars zwei Schaltflächen anzeigen: eine Schaltfläche "Jetzt veröffentlichen" und eine Schaltfläche "Als Entwurf speichern". Wenn der Benutzer auf die erste Schaltfläche drückt, wird das Feld "Veröffentlicht" auf "true" gesetzt. Drückt er letztere, wird es auf false gesetzt. In PHP habe ich 2 Eingabefelder mit unterschiedlichen Werten angezeigt und dann die Eingabe mit einer if/else-Anweisung verarbeitet, um die richtige SQL-Abfrage zu erstellen. In Rails nehme ich an, dass ich diese Logik im Controller unter der entsprechenden Aktion platzieren würde, aber ich bin mir nicht sicher, wie man den Namen oder die id-Werte von Schaltflächen manipuliert.

Für das Protokoll, ich bin mit Formtastic, aber wenn jemand mir zeigen könnte, wie man dies mit den Standard-Rails-Formular-Tags zu tun, das ist auch OK. Hier ist der Code für mein Formular, wie es im Moment steht:

<% semantic_form_for @ereport do |form| %>

  <% form.inputs do %>
    <%= form.input :title %>
    <%= form.input :body %>
  <% end %>
  <% form.buttons do %>
    <%= form.commit_button :label => "Publish Now" %>
<%= form.commit_button :label => "Save as Draft" %>
  <% end %>
<% end %>

Vielen Dank im Voraus für die Hilfe!

20voto

idlefingers Punkte 30903

Ich weiß nicht, über formtastic, aber mit der Standard-Rails Form Builder, könnten Sie es wie folgt tun:

<%= form.submit "Save with option A", :name => "save_option_a" %>
<%= form.submit "Save with option B", :name => "save_option_b" %>

In der Steuerung können Sie diese dann in params abrufen:

if params[:save_option_a]
  # do stuff
end

1voto

juanm55 Punkte 1661

Zusätzlich zur Antwort von @iddlefingers hier ein Blick in das Protokoll der Anwendung (wobei einige unbrauchbare Parameter zu Erklärungszwecken herausgenommen wurden)

Parameters: {"utf8"=>"", ..., "comentar"=>"Confirmar"}

wo wir sehen können, dass comentar ist der Name des Parameters, und "Confirmar" ist ihr Wert, der auch der Text der Schaltfläche ist.

die erhalten wurde durch submit_tag "Confirmar", :name => 'comentar'

Im Allgemeinen könnte man also (wenn man die Anzahl der params mit denen Sie arbeiten) mehrere submit_tag "onevalue", :name => 'SAMEname' , submit_tag "othervalue", :name => 'SAMEname' ...

und rufen Sie sie in Ihrem Controller ab

if params[:SAMEname] == "onevalue"
# do stuff
elsif params[:SAMEname] == "othervalue"
#do different stuff
end

0voto

Ashish Punkte 5648

Ich denke, Sie müssen jQuery verwenden. Sie können die Schaltfläche Klick-Ereignis binden und senden Sie das Formular für angegebenen Ort.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X