【发布时间】:2014-09-16 13:17:18
【问题描述】:
我有一个很好用的 HTML 表单,上面有一些合理的数据,所以我希望只有令牌参数进入我的服务器。是这样的:
<form id="payment-form" method="POST">
<div class="usable-creditcard-form">
<div class="six columns">
<div class="input-group nmb_a">
<div class="icon ccic-brand"><label for="number">Número do Cartão</label></div>
<input autocomplete="off" class="credit_card_number" data-iugu="number" placeholder="Número do Cartão" type="text" value="" />
</div>
</div>
<div class="six columns">
<div class="input-group nmb_b">
<div class="icon ccic-cvv"><label for="verification_value">Codigo de Seguranca</label></div>
<input autocomplete="off" class="credit_card_cvv" data-iugu="verification_value" placeholder="CVV" type="text" value="" />
</div>
</div>
<div class="six columns">
<div class="input-group nmb_c">
<div class="icon ccic-name"><label for="full_name">Nome Completo</label></div>
<input class="credit_card_name" data-iugu="full_name" placeholder="Titular do Cartão" type="text" value="" />
</div>
</div>
<div class="six columns">
<div class="input-group nmb_d">
<div class="icon ccic-exp"><label for="expiration">Data de Expiracao (MM/AA)</label></div>
<input autocomplete="off" class="credit_card_expiration" data-iugu="expiration" placeholder="MM/AA" type="text" value="" />
</div>
</div>
</div>
<div class="six columns">
<div class="token-area">
<input type="hidden" name="token" id="token" value="" readonly="true" size="64" style="text-align:center" />
</div>
</div>
<div>
<button type="submit">Comprar</button>
</div>
但是当我使用 Rails 的表单助手时,所有参数都发送到我的服务器,我不知道为什么,但我希望使用表单助手,只发送令牌字段
代码如下:
<%= form_tag iugu_checkout_path, :id=>"payment-form" do%>
<div class="usable-creditcard-form">
<div class="input-group nmb_a">
<div class="icon ccic-brand">
<%= label_tag :number, "Número do Cartão" %>
</div>
<%= text_field_tag :number, nil , :class=> "credit_card_number", "data-iugu"=> "number" %>
</div>
<%= label_tag :verification_value, "Codigo de Seguranca" %>
<%= text_field_tag :verification_value, nil , :class=> "credit_card_cvv", "data-iugu"=> "verification_value" %>
<%= label_tag :full_name, "Nome Completo" %>
<%= text_field_tag :full_name, nil , :class=> "credit_card_name", "data-iugu"=> "full_name" %>
<%= label_tag :expiration, "Data de Expiracao (MM/AA)" %>
<%= text_field_tag :expiration, nil , :class=> "credit_card_expiration", "data-iugu"=> "expiration" %>
<%= hidden_field_tag :token%>
<div class="actions">
<%= submit_tag "Comprar" %>
</div>
<% end %>
为什么使用 HTML 表单只有一个参数会发送到我的服务器,而使用表单助手会发送所有参数,以及如何使用表单助手仅发送令牌参数?
【问题讨论】:
-
如果您只想发送令牌参数,那么只需保留令牌输入并将所有其他令牌显示为标签中的静态文本,而不是文本输入框。表单内的任何文本字段都将被发送回服务器。因此,为了避免将值发送到服务器,只需将它们显示为文本而不是在输入文本框中。
-
但是需要用户自己输入!不同的是,数据是由 JS 处理的,而这个 JS(一个 API)为我填充了 token 字段。
-
另外,为了回答您的问题,
text_field_tag将生成一个文本字段,其名称为您在text_field_tag中指定的第一个参数,因此当表单提交时,所有带有名称的文本字段都将被发送与他们各自的价值观。虽然您的 html 表单在文本字段中根本没有 name 属性。这就是为什么:)
标签: html ruby-on-rails forms ruby-on-rails-4