错误后刷新 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_to
和 new
操作。
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 %>
我正在使用 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_to
和 new
操作。
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 %>