2 кнопки отправки в форме


У меня есть вопрос о формах. У меня есть довольно стандартная форма, которая сохраняет сообщение (называемое eReport в моем приложении) с заголовком и телом. В таблице также есть поле" published", которое является логическим. Сохраненный eReport отображается на общедоступном сайте только в том случае, если этому полю присвоено значение true, а по умолчанию установлено значение false.

Вместо флажка по умолчанию я хотел бы отобразить две кнопки в конце формы: кнопку" Опубликовать сейчас "и кнопку" Сохранить как черновик". Если пользователь нажимает первый, опубликованные поле будет иметь значение true. Если последнее, то ложное. В PHP я использовал для отображения 2 полей submit с различными значениями имен, а затем обрабатывал входные данные с помощью оператора if / else, чтобы определить правильный SQL-запрос для построения. В Rails я предполагаю, что я поместил бы эту логику в контроллер, под соответствующее действие, но я не уверен, как манипулировать именами или значениями идентификаторов кнопок.

Для записи, я использую Formtastic, но если бы кто-нибудь мог показать мне, как это сделать с помощью по умолчанию рельсы образуют теги, это тоже нормально. Вот код для моей формы, как она сейчас выглядит:

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

Заранее спасибо за помощь!

3 8

3 ответа:

Я не знаю о formtastic, но с помощью конструктора форм rails по умолчанию вы можете сделать это следующим образом:

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

Затем в контроллере вы можете выбрать их в парах:

if params[:save_option_a]
  # do stuff
end

В дополнение к ответу @ iddlefingers, вот вид журнала приложения (чередование некоторых бесполезных параметров из-за объяснения целей)

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

Где мы видим, что comentar - это имя параметра, а "Confirmar" - его значение, которое также является текстом кнопки.

Который был получен с помощью submit_tag "Confirmar", :name => 'comentar'

Таким образом, в целом вы могли бы иметь (если вы хотите уменьшить число params, с которыми вы работаете) несколько submit_tag "onevalue", :name => 'SAMEname', submit_tag "othervalue", :name => 'SAMEname'...

И получить их в вашем контроллере

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

Я думаю, что вам нужно использовать jQuery. Вы можете привязать событие нажатия кнопки и отправить форму в указанное место.