2013-05-22 3 views
1

나는 장바구니 앱을 작업 중이며 주문 모델이 있습니다. 주문 모델에 carrier, tracking_numbership_date을 포함하도록 배송 세부 정보를 추가했습니다. 순서를 업데이트 한 후 다른 리디렉션을 사용하기 위해 updateshipping이라는 메서드를 만들었습니다.다른 양식으로 리디렉션하는 레일 양식

저장 후 레일에 조건부 리디렉션이 가능한지 확실하지 않거나 updateshipping 방법 (내가 시도한 것)에 액세스 할 수있는 맞춤 경로를 만들어야하는 경우 또는 정답이 맞다면 운송 세부 사항을 담을 새 모델을 만들어야합니다.

updateshipping 메서드를 통해 부분 부분을 리디렉션하려고했으나 제출 버튼이 작동하지 않습니다. 제출 버튼 위로 마우스를 가져 가면 URL이 표시되지 않습니다. 을 제출하면을 제출하면 부분 양식을 다시로드하는 것처럼 보입니다. 나는 form_for@order 후 모든 것을 제거하면 내이 문제는 form_for 라인입니다 가정 있도록 올바르게 업데이트 주문/업데이트 방법에 간다 (또는 그 첫번째 장소에있는 순서 모델의 일부입니다.)

<%= form_for(@order, :url => shipment_path, :html => { :method => "put" }) do |f| %> 

    <%= render 'shared/error_messages', object: f.object %> 

    <%= f.label :carrier %> 
    <%= f.text_field :carrier %> 

    <%= f.label :tracking_number, "Tracking #" %> 
    <%= f.text_field :tracking_number %> 

    <div class="form-actions"> 
    <%= f.submit "Save changes", class: "btn btn-warning" %> 
    </div> 
<% end %> 

주문 컨트롤러

def updateshipping 
    raise params.inspect (code to update the order will come later) 
end 

레이크 경로

shipment  /shipmentdetails/:id(.:format)   orders#shipment_details 
shipment PUT /shipmentdetails/:id(.:format)   orders#updateshipping 

routes.rb

match '/shipmentdetails/:id' => 'orders#shipment_details', :as => :shipment 
match '/shipmentdetails/:id' => 'orders#updateshipping', :as => :shipment, via: :put 

주문 모델 대신 :html => { :method => "put" }

class Order < ActiveRecord::Base 
    attr_accessible :name, :address, :carrier, :tracking_number, :ship_date 
    has_many :line_items, dependent: :destroy 
    has_one :user 
    has_one :shop 

    validates :name, :address, presence: true 
end 

답변

1

경로는 부분 양식에 링크되어 있습니다.

match '/shipmentdetails/:id' => 'orders#shipment_details', :as => :shipment 

에 : 어쩌면

match '/shipmentdetails/:id/edit' => 'orders#shipment_details', :as => :edit_shipment 

그것이 shipment_path 사이에 혼동하지만 난 form_for에서 경로가 알려진 했어야 "넣어"방법을 가지고 있다고 생각하기했다 나는에서 경로를 변경 다음과 같은 경로를 사용 : 내 원래의 시도에서 form_for에 관해서는

match '/shipmentdetails/:id' => 'orders#updateshipping', :as => :shipment, via: :put 

form_for(@order, :url => shipment_path, :html => { :method => "put" }) 

는 단지 권장

form_for(@order, :url => shipment_path(@order), :html => { :method => "put" }) 

처럼 작동하는 것 같다하지만 난 그냥 shipment_path 대신 shipment_path (@order)를 사용하는 것이 더 좋은 연습입니다 있는지 확실하지 않습니다.

0

,에 :method => "put"

+0

동일한 결과를 보았습니다. 테스트를하는 동안 부분 재로드가 나타납니다. 따라서 "put"을 인식하지 못하고 route.rb에서 일치하는 항목을 찾지 못하시겠습니까? – Steve

0

변경 form_for 라인을보십시오 :이 일을하지만 난이 변경 이유를 잘 모르겠어요

form_for(@order, :url => shipment_path(@order), :html => { :method => "put" }) 
+0

나는 이것을 시도했지만 그 자체로 문제를 해결하지는 못했다. 문제는 편집 경로와 업데이트 경로가 혼동되었을 수도 있습니다. 일단 내가 원래의 form_for뿐만 아니라 위의 폼에 대한 응답을 사용하여 작동하도록 할 수있는 루트를 수정했습니다. 나는 어느 것이 바람직한지 잘 모르겠다. – Steve

관련 문제