2012-01-03 5 views
1

모델의 속성을 업데이트하는 양식이 있습니다. 다른 작업으로 이동하려는 표준 업데이트 작업으로 이동하지 마십시오.id를 form_for 작업에 전달하십시오.

<% for car in @cars %> 
<%= form_for car, :url => { :action => "custom_action/#{car.id}" } do |f| -%> 

이 다음과 같은 오류를주고있다 - custom_action/1 - - 나는 URL을 방문하지만 경우

No route matches {:action=>"custom_action/1", :controller=>"cars"} 

을 나는 라우팅 오류가 발생하지 않습니다.

내가 왜 이럴 수 없습니까? 당신이 행동하고 있기 때문에 당신이 (형태는 기본적으로 POST 요청을 방출하는 반면, 당신이하는 GET 요청을하고있는 URL 표시 줄에 입력하여 URL로 이동,이 경우 아마 PUT 요청을 방출 할 경우

답변

3

프레드릭 청 (Frederick Cheung)이 GET 대 POST와 PUT에 대해 언급 한 것 이외에 일반적으로 코드가 잘못되었을 수도 있습니다.

form_for car, :url => {:action => "custom_action", :id => car, :controller => "cars"} do |f| 

나는 이것이 좋은 아이디어라고 생각하지 않으며, 아마 통증을 유발합니다

정확하게 당신이 원하는 일을하려면보십시오. 이 작업을 올바르게 수행하는 방법을 이해하려면 Ruby on Rails Routing Guide을 살펴 보는 것이 좋습니다. (라우팅 내가 항상 설명서를 참조해야 할 주제입니다.) 정확한 경로와

당신의 코드는 다음과 같이 보일 것입니다 : 더 쉬울 것이다

form_for car, custom_action_car_path(car) do |f| 

가 미래에 변경을 할 때를/경우 앱을 리팩터링하십시오.

+0

대단히 고마워요. 이제 경로를 살펴보십시오. – Finnnn

+0

경로에서'resources : cars do; 게시 : custom_action, : on => : member; end' 그러면 컨트롤러와 뷰에서'custom_action_cars_path (car)'를 사용할 수 있습니다. –

1

기존 기록에).

경로가 GET 개만 라우팅되는 것 같습니다. 맞춤 작업으로 기록을 업데이트한다고 가정하면 대신 PUT 요청을 수락하도록 경로를 업데이트해야합니다.

+0

감사합니다. 라이언의 답변에 따라 내 노선을 정리하려고합니다. – Finnnn