我有一个表单,结果只显示渲染而不是重定向。
因此不得重定向表单。有人知道这是否可以使用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
答案 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:success
或ajax:error
,并处理从calculate_ship
获得的响应。
需要注意的一点是,当您进行表单提交时,该方法默认为POST
,可能应该是PUT
或PATCH
。
以下是rails的相关文档:http://guides.rubyonrails.org/working_with_javascript_in_rails.html#form-tag