2011-12-29 1 views
1

중첩 된 자원의 새로운 작업에 대한 POST 요청을 생성합니다, 지금레일 노선이 나는 다음과 같은 중첩 된 자원 한

= button_to "Make Offer", new_listing_offer_path(@listing) 

을 내 명부/show.html.haml에서

resources :listings do 
    resources :offers do 
    member do 
     put "accept" 
     put "reject" 
    end 
    end 
end 

이를 때

Started POST "/listings/2/offers/new" for 127.0.0.1 
ActionController::RoutingError (No route matches "/listings/2/offers/new"): 

내가 새로 고치면 (GET 요청), 다음 페이지의 표시 : 나는 레일 POST 요청을 생성하고, 따라서 오류, 버튼을 클릭합니다 ys 올바르게.

이 잘못된 라우팅은 수락 및 거부 (POST 동작 일 수밖에없는 추가 작업)를 추가 할 때만 발생한다고 생각합니다.

레일스에 버그가 있습니까? 아니면 내 잘못입니까? 이 오류를 어떻게 방지해야합니까?

감사합니다.

답변

2

button_to 도우미는 기본적으로 지정한 URL ("/ listings/2/offers/new")에 POST 요청을 보내는 양식을 만듭니다.

지정한 라우팅은/new에 대한 POST 요청을 처리하는 경로를 생성하지 않습니다. "rake routes"태스크를 실행하여 생성 된 라우트와 응답 할 verb를 조사 할 수 있습니다.

단순히 양식에 연결하려는 경우 "button_to"를 "link_to"로 변경하고 CSS는 미학을 위해 추가하십시오. (이

= button_to "Make Offer", listing_offers_path(@listing) 

:

= link_to "Make Offer", new_listing_offer_path(@listing) 

(이 GET은 OfferController의 새로운 액션 노선 것)

가 실제로 데이터를 게시하는 찾고 있다면, 당신은 가능성에 사용을 변경해야합니다 POST는 OfferController의 작성 작업으로 연결됩니다.)

+0

감사합니다. Mike. 힌트에서, 나는 add : method => : button_to를 얻을 수 있다는 것을 깨달았다. 그것은 작동합니다. – AdamNYC

+0

문제 없습니다. 그래, 그것도 작동하지만 검색 폼이나 뭔가가 아니라면 GET을 수행하기 위해 양식 제출을 사용하면 나에게 어색한 느낌이 들기 때문에 의도적으로 그 솔루션을 빠져 나왔다.하지만 확실히 작동한다! – miked