Rails如何渲染表单而不是重定向提交?

时间:2017-04-10 22:15:03

标签: mysql ruby-on-rails forms ruby-on-rails-3

我有一个表单,结果只显示渲染而不是重定向。

因此不得重定向表单。有人知道这是否可以使用rails?

表格是:

  Pac: <%= @pac %> 
                   Sedex: <%= @sedex %> 
                 <%= form_tag calculate_ship_path, :method => "get" do %>                          
                  <%= text_field_tag :post_code%>
                 <% end %> 

订单控制器和操作是:

  def calculate_ship
    frete = Correios::Frete::Calculador.new cep_origem: "#{@order.seller.post_code}",
      :peso => "#{@order.product.weight}",
      :comprimento =>  "#{@order.product.weight}",
      :largura =>  "#{@order.product.weight}",
      :altura =>  "#{@order.product.weight}",
      cep_destino: params[:post_code]
    servicos = frete.calcular :sedex, :pac
    @pac = servicos[:pac].valor
    @sedex = servicos[:sedex].valor
    render '/path/to/rails/app//orders/:id/checkout'
  end

,路线是:

get  '/path/to/rails/app//orders/:id/checkout', to: 'orders#checkout', as: :calculate_ship

1 个答案:

答案 0 :(得分:1)

Rails有一个非常方便的方法来处理这个问题:远程表单。这里需要注意的是,如果你没有使用Unobtrusive JS(UJS),那么这将无法工作,你必须以艰难的方式连接它。

在表单标记符号中,它看起来像这样,假设您使用的是Rails 5:

<%= form_tag(calculate_ship_path, remote: true, method: "GET") do %>
  <%# form stuff %>
<% end %>

你应该可以在大多数Rails版本中执行此操作,但它可能看起来有点不同。这实际上是通过AJAX提交表单的。然后,您就可以将JS事件侦听器绑定到ajax:successajax:error,并处理从calculate_ship获得的响应。

需要注意的一点是,当您进行表单提交时,该方法默认为POST,可能应该是PUTPATCH

以下是rails的相关文档:http://guides.rubyonrails.org/working_with_javascript_in_rails.html#form-tag