【问题标题】:How Rails send the parameters in formsRails 如何在表单中发送参数
【发布时间】: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


【解决方案1】:

用我上面的cmets。

我想到的一个非常快速的解决方案是,只需从 text_field_tag 中删除 name 属性,这样你就会得到这样的结果

<input autocomplete="off" class="credit_card_number" data-iugu="number" placeholder="Número do Cartão" type="text" value="" />

这意味着,您必须将 text_field_tag 更改为

text_field_tag nil, nil , :class=> "credit_card_number", "data-iugu"=> "number"

而不是

text_field_tag :number, nil , :class=> "credit_card_number", "data-iugu"=> "number"

当然,您必须更改所有其他文本字段,即您不想发送的值。 希望有帮助

【讨论】:

  • 工作就像一个魅力!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-22
相关资源
最近更新 更多