【问题标题】:Form isn't submitting data to my Model. How to create data on submit?表单未向我的模型提交数据。如何在提交时创建数据?
【发布时间】:2018-10-30 06:26:52
【问题描述】:

问题:表单未向订单表提交数据

我有一个 form_for,它连接到 2 个控制器,以便在提交后将数据连接在一起。我最近连接了 Stripe Elements,它有自己的控制器。我有一个虚拟表格,当我提交信息时,数据将通过并保存到订单表中。我删除了表单并将元素表单放置到位,但我设置它的方式没有提交到表格。

这是表格:

  <form id="form-element" action="/charges" method="post" id="payment_form">


<%= form_for([@listing, @order]) do |form| %>


  <% if @order.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@order.errors.count, "error") %> prohibited this order from being saved:</h2>

      <ul>
      <% order.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <script

    src="https://js.stripe.com/v3/">
    // data-key="pk_test_3vX123456789YKE1f0B8"
    // data-amount = {@listing.price}
    // data-locale="auto">

  </script>

    <div class="form-row">
      <label for="card-element">
        Credit or debit card
      </label>
      <div id="card-element" class="form-control">
        <!-- a Stripe Element will be inserted here. -->
      </div>

      <!-- Used to display form errors -->
      <div id="card-errors" role="alert"></div>
    </div>
      <br>
      <div class="form-group">

    <%= form.submit "asdf", class:"ripple-effect", id:"button-element" %>
  </div>

  <span class="token"></span>
  </form>
  <% end %>
  </div>
  <script>

   ....
</script>

在我的 OrdersController 中,这是我的创建方法:

def create
    @order = Order.new(order_params)
    @listing = Listing.find(params[:listing_id])
    @seller = @listing.user

    @order.listing_id = @listing.id
    @order.buyer_id = current_user.id
    @order.seller_id = @seller.id
    ....

这是我的 ChargesController:

def create

    @amount = 500
    token = params[:stripeToken]
    payment_form = params[:payment_form]


    charge = Stripe::Charge.create({

      :source  => 'tok_visa',


      :amount      => @amount,
      :description => 'Rails Stripe customer',
      :currency    => 'usd'
    })

  rescue Stripe::CardError => e
    flash[:error] = e.message
    redirect_to new_charge_path
  end

我尝试将订单控制器信息输入到费用控制器中,反之亦然。行不通。然后认为这只是表单的设置方式。所以基本上,如果这是解决方案,我该如何做到这一点,当我输入表单时,数据会注册到订单表中。

此信息可能会有所帮助.. 这是可以成功将信息转发到订单表的虚拟表单:https://pastebin.com/th2WC8Lj

我将 form.submit 添加到条带表单中,但没有这样做。我想它至少会创建一个空白订单。

尝试使用 ajax 异步提交表单.. 不工作。

<script>
...
  $('#Orders').on('submit', function(event) {
      event.preventDefault();
      $.ajax({
          type: "POST",
          url: "/charges",
          data: $('#payment_form').serialize()
      }).then(this.submit.bind(this));
    });

</script>

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    目前,表单正在发布到charges 端点,这意味着只调用了ChargesController#create 代码。您需要执行以下操作:

    • 将费用创建代码复制到OrdersController#create 方法中,并删除代码块顶部的&lt;form id="form-element" action="/charges" method="post" id="payment_form"&gt; 标签。然后将表单提交给OrdersController#create 方法。

    我之所以说重复代码是因为我们不知道是否可以在没有关联订单的情况下创建费用,在这种情况下,您希望保留独立创建费用的能力。

    【讨论】:

    • 这个问题是条带表单依赖于 Javascript...虽然我确实尝试过,但在提交订单或条带令牌时没有发生任何事情。 jsfiddle.net/k4j05Lu6 - 我可以通过什么方式设置要合并的表单,以便提交时一个接一个地输入?
    • 您能否在您的 Rails 应用程序中发布生成的 HTML 表单代码的要点?这将帮助我确定您提交表单时为什么没有任何反应。
    • 表单在 OP 中看起来像上面的,但添加了“ 或 2.. 但问题是,没有
      你'说要删除,它不会起作用,据我所知,因为它连接到 javascript,然后将 API 请求发送到条带。不知何故,我们需要将它们组合起来。我已经摆弄了异步提交表单的方法javascript AJAX,但尚未确定。我在上面的尝试上方发帖。我正在尝试其他一些方法。我相信这需要使用 javascript AJAX 来完成。如果您有任何想法或想法,请告诉我。
    • 您可以修改 Javascript Stripe 提供的示例以创建令牌并提交 Rails 生成的表单,以创建订单向付款来源收费。 :-) 要非常明确,您不需要 需要 原始
      标记以使其与 Stripe Elements 一起使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 2013-01-09
    • 2020-12-25
    • 2019-12-25
    • 2014-06-20
    相关资源
    最近更新 更多