2017-04-10 3 views
0

리디렉션 대신 렌더링하는 경우 결과가 표시되는 양식이 있습니다.제출시 리디렉션 대신 양식을 렌더링하는 방법을 레일에 레일스 하시겠습니까?

양식을 리디렉션해서는 안됩니다. 누군가 레일을 사용할 수 있는지 알고 있습니까?

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

그냥 명확히하기를, 당신은 양식을 제출하고 다시로드하거나 새 페이지로 이동하지 않고 같은 페이지에 표시되는 반환 된 데이터를 가지고 찾고? – octopushugs

+0

Hello @octopushugs, 예. – bookaka

답변

1

레일이 있습니다 이것을 처리하는 매우 편리한 방법 : 원격 양식. 여기에주의해야 할 점은 UJS (Unobtrusive JS)를 사용하지 않으면 작동하지 않을 것이므로 어렵게 연결해야합니다.

는 form 태그의 표기에서는 레일 (5)을 사용하고 당신을 추정, 다음과 같이 보일 것입니다 :

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

당신은 대부분의 레일 버전이 작업을 수행 할 수 있어야하지만, 약간의 차이가있을 수 있습니다. 이것은 효과적으로 AJAX를 통해 양식을 제출하는 것입니다. 그러면 JS 이벤트 리스너를 ajax:success 또는 ajax:error에 바인딩하고 calculate_ship에서받는 응답을 처리 할 수 ​​있습니다.

양식 제출을 수행 할 때 기본값은 POST이며 기본값은 PUT 또는 PATCH이어야합니다.

여기 레일 관련 문서입니다 : http://guides.rubyonrails.org/working_with_javascript_in_rails.html#form-tag

+0

감사합니다! 레일 3 또는 4의 이 다른가요? – bookaka

+0

그들은 비슷해야합니다. – octopushugs