错误后刷新 Drop-in UI - Braintree/Rails

refresh Drop-in UI after error - Braintree/Rails

我正在使用 Braintree api 及其 Drop in UI,在我收到不成功的响应之前,它工作正常。

ui 的下降并没有让人耳目一新(也许我需要做些什么),这导致用户无法输入新的卡详细信息。我不想保留卡的详细信息,只需再次显示该表格

我没有使用 turbolinks

def new
  gon.client_token = generate_client_token
end

def create
  @result = Braintree::Transaction.sale(
            amount: amount,
            payment_method_nonce: params[:payment_method_nonce],
            customer: {
              first_name: params[:first_name],
              last_name: params[:last_name]
            options: {
              submit_for_settlement: true
            }
          )
  if @result.success?
    redirect_to thank_you_path
  else
    @error_message = BraintreeErrors::Errors.new.error_message(@result)
    flash.now[:alert] = @error_message
    gon.client_token = generate_client_token
    render :new
  end
end

我需要做些什么才能让它工作吗?

更新

如评论中所述,我可以重定向到新操作,重新加载我的页面,这将显示我在 ui 表单中的下降,所以扩展这个问题如果我想保留数据怎么办由于用户已经填写了我表格的另一部分,如姓名、地址等,我也不担心卡信息

我用的是form_tag

<%= form_tag transactions_path, class: 'form-small form' do %>
  <%= text_field_tag :first_name, "", placeholder: 'First Name', required: false %>
  <%= text_field_tag :last_name, "", placeholder: 'First Name', required: false %>
<% end %>

谢谢

您可以让您的 create 操作 redirect_tonew 操作。

def new
  @first_name = params[:first_name] if params[:first_name].present?
  @last_name = params[:last_name] if params[:last_name].present?
end

def create
  ...

  if @result.success?
    redirect_to thank_you_path
  else
    redirect_to new_path (
      first_name: params[:first_name], 
      last_name: params[:last_name]
    )
  end
end

然后您需要更新表单,以便它选择 'default' 值

<%= form_tag transactions_path, class: 'form-small form' do %>
  <%= text_field_tag :first_name, @first_name, placeholder: 'First Name', required: false %>
  <%= text_field_tag :last_name, @last_name, placeholder: 'First Name', required: false %>
<% end %>

如果您有很多这样的属性,那么将它们全部捆绑在一个 customer_details 对象中会更清晰。然后在你看来你可以做

<%= form_for @customer_details do |c| %>
  <%= c.text_field :first_name %>
<% end %>