submit_tag do hidden_field - сохранение данных? - PullRequest
2 голосов
/ 16 сентября 2011

Я создаю простую форму оплаты, которая позволяет пользователям выбирать из нескольких различных шлюзов для оплаты (PayPal, Google Checkout и т. Д.).

Все шлюзы будут на их размещенной странице, не интегрированы в мойown.

Что я пытаюсь сделать логически, это создать несколько разных кнопок отправки в моей форме.Каждая кнопка отправки будет иметь скрытое поле, которое определяет шлюз, что-то вроде:

<%= f.submit "Payment", :type => :image, :src => "https://www.paypal.com/en_US/i/btn/btn_xpressCheckout.gif"  do %>
<% f.hidden_field :gateway, :value => "paypal" %>
<% end %>

Затем в моем контроллере:

if @payment.save and @payment.gateway == "paypal"
      redirect_to @payment.paypal_url #model method to link to payment url
else
      render "new"
end

Однако у меня возникают проблемы с данными скрытого поляэкономии.Каждый раз, когда я придумываю значение nil для своего шлюза.

Я предполагаю, что у меня есть два вопроса:

Как назначить данные со скрытым полем?Можно ли использовать submit_tag для цикла do со скрытым полем?

1 Ответ

2 голосов
/ 16 сентября 2011

Я думаю, что лучшим решением будет использование JavaScript для обработки заполнения скрытых полей. Таким образом, вы можете сделать что-то вроде этого:

<%= hidden_field_tag "gateway", :id => "gateway" %>
<%= submit_tag "Paypal", :id => "paypal", *other options* %>
<%= ... other similar buttons %>

Затем вы можете использовать javascript для заполнения hidden_field_tag необходимыми данными: скажем, имя шлюза (paypal, ...). Для этого просто найдите элемент DOM (hidden_field_tag) по id: gateway и заполните ваши данные.
За. напр .:

$(function(){
  $('input[type='submit']').click(function(){
     var gateway_title = $(this).attr("id")
     $('#gateway').val(gateway_title);
  })
})

.. или вы можете установить такой код в обработчике отправки формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...