Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

2 submit buttons in a form

I have a question about forms. I have a fairly standard form that saves a post (called an eReport in my app) with a title and body. The table also has a "published" field, which is boolean. The saved eReport only shows on the public site if this field is set to true, with false being the default.

Rather than the default check box, I would like to display two buttons at the end of the form: a "Publish Now" button and a "Save as Draft" button. If the user presses the former, the published field would be set to true. If the latter, then false. In PHP, I used to display 2 submit fields with different name values, then handle the input with an if/else statement to determine the proper SQL query to build. In Rails, I'm assuming I would place this logic in the controller, under the appropriate action, but I'm not sure how to manipulate the name or id values of buttons.

For the record, I'm using Formtastic, but if someone could show me how to do this with the default Rails form tags, that's OK too. Here's the code for my form as it stands right now:

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

Thanks in advance for the help!

like image 725
joshukraine Avatar asked Mar 11 '11 10:03

joshukraine


2 Answers

I don't know about formtastic, but with the default rails form builder, you could do it like this:

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

Then in the controller, you can pick those up in params:

if params[:save_option_a]
  # do stuff
end
like image 156
idlefingers Avatar answered Oct 18 '22 17:10

idlefingers


in addition to @iddlefingers answer, here is a view of the log of the application (striping some useless params due to explanation purposes)

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

where we can see that comentar is the name of the parameter, and "Confirmar" is it's value, which is the button's text too.

which was obtained by submit_tag "Confirmar", :name => 'comentar'

So in general you could have (if you want to reduce the number of params you are working with) several submit_tag "onevalue", :name => 'SAMEname', submit_tag "othervalue", :name => 'SAMEname'...

and retrieve them in your controller

if params[:SAMEname] == "onevalue"
# do stuff
elsif params[:SAMEname] == "othervalue"
#do different stuff
end
like image 1
juanm55 Avatar answered Oct 18 '22 17:10

juanm55