Несколько кнопок/форм отправки в Rails
Я пытаюсь написать приложение rails, которое позволяет перейти на определенную страницу, например /person/: id. На этой странице отображается набор доступных ресурсов. Я хочу, чтобы у каждого ресурса была кнопка рядом с ней, которая резервирует этот ресурс для этого человека (путем создания нового экземпляра модели распределения). В качестве расширения я бы хотел несколько кнопок каждого ресурса, которые отменяют резервирование и делают другие вещи. Я также хотел бы вводить данные рядом с некоторыми кнопками, например. для выделения некоторого% ресурса.
Моя проблема заключается в том, что я не могу понять, как разумно это сделать, не повторяя себя или не имея очень хакерского контроллера. Как я могу сделать это без согласования с частью значения кнопок отправки (текст на кнопках) или с помощью любого javascript?
Кроме того, если у вас есть две формы на странице, как вы ее настроите, так что изменения в обеих формах сохраняются при нажатии любой кнопки отправки?
Ответы
Ответ 1
im, используя jQuery, и это то, что я сделал:
<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 %>
Идея состоит в том, чтобы изменить действие формы "на лету", на основе которой нажата кнопка
Ответ 2
Сделайте каждую строку в списке формой и поместите информацию о предмете, о котором идет речь. Конечно, вам нужно будет отправить и перезагрузить страницу с каждым действием. Единственный способ обойти это - использовать флажки вместо кнопок и сделать их одной большой формой - или использовать Javascript.
Что касается вашего второго вопроса, если вы хотите, чтобы кнопка отправки влияла на две "формы", вы должны сделать их частью одной и той же формы. Если вам нужно, у вас может быть несколько кнопок отправки. В противном случае вы можете динамически генерировать третью форму с Javascript, заполненным значениями из исходной формы, но это не будет работать во всех случаях (например, входы файлов).