submit_tag do hidden_​​field - 保存数据?

时间:2011-09-16 18:01:51

标签: ruby-on-rails

我正在创建一个简单的付款方式,允许用户从几个不同的网关中进行选择(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循环?

1 个答案:

答案 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);
  })
})

..或者您可以在表单提交处理程序上设置此类代码。