我正在创建一个简单的付款方式,允许用户从几个不同的网关中进行选择(paypal,google checkout等)。
所有网关都将在他们的托管页面上,而不是我自己集成。
我正在尝试逻辑上做的是在我的表单上创建几个不同的提交按钮。然后每个提交按钮都有一个hidden_field,用于指定网关,如:
<%= 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
但是,我遇到了hidden_field数据保存的问题。每次我为我的网关提出零值。
我想我有两个问题:
如何使用hidden_field分配数据? 是否可以将submit_tag用于带有hidden_field的do循环?
答案 0 :(得分:2)
我认为更好的解决方案是使用javascript来处理填充隐藏字段。所以你可以做这样的事情:
<%= hidden_field_tag "gateway", :id => "gateway" %>
<%= submit_tag "Paypal", :id => "paypal", *other options* %>
<%= ... other similar buttons %>
然后你可以使用javascript来填充hidden_field_tag
nessesary数据:说网关名称(paypal,...)。为此,只需通过id: gateway 查找DOM元素(hidden_field_tag)并填写您的数据。
对于。例如:
$(function(){
$('input[type='submit']').click(function(){
var gateway_title = $(this).attr("id")
$('#gateway').val(gateway_title);
})
})
..或者您可以在表单提交处理程序上设置此类代码。