2014-01-17 2 views
1

그래서이 데이터베이스에 대한 동영상이 있습니다. 내 경로 파일에 resources :movies 항목을 만들었으므로 필요한 모든 경로를 제공해야합니다.데이터베이스 항목을 업데이트 할 때 경로 오류가 발생했습니다.

이 내 영화 컨트롤러 : https://github.com/Veske/form/blob/ryhm/app/controllers/movies_controller.rb

내가 whatever.com/movies/1/edit에 동영상을 편집 할 때이 내가 오류입니다 :

Routing Error 
No route matches [POST] "/movies/1/edit" 

이 있습니다 지금 영화를위한 경로 :

movies_path GET  /movies(.:format) movies#index 
POST  /movies(.:format) movies#create 
new_movie_path GET  /movies/new(.:format) movies#new 
edit_movie_path GET  /movies/:id/edit(.:format) movies#edit 
movie_path GET  /movies/:id(.:format) movies#show 
PATCH /movies/:id(.:format) movies#update 
PUT /movies/:id(.:format) movies#update 
DELETE /movies/:id(.:format) movies#destroy 

이제 movie/: id/edit에 대한 POST가 실제로 없음을 분명히 알 수 있습니다. 그런데 왜 그런가요? 내가 노선에 입력 한 선이 그걸 나에게주는 것이 아니겠습니까?

편집 : 영화에

링크보기 : https://github.com/Veske/form/blob/ryhm/app/views/movies/edit.html.erb

답변

1

귀하의 문제가 오류 No route matches [POST] "/movies/1/edit"을 받고있어, 따라서 당신은 왜, 편집 페이지에있는 양식에 POST를 호출하고 있다는 점이다.

  1. 양식이 필요가 PUT 방법을 사용하도록 변경 될 : 코드를 보지 않고

    이 그냥 추측하지만 중 하나입니다.

  2. 편집을위한 링크가 잘못되었으므로 GET 요청이 필요합니다.
+0

지금 고치려고했습니다. – Veske

+0

좋아요. 양식을 만들었습니다. <% = form_for : movie, : html => {: method => : put} do | f | %> 하지만 영화/: id/edit에 경로를 지정하지 않았다는 사실은 변함이 없습니다. 어떻게 그 경로를 얻을 수 있습니까? 제 말은 ... 자원이 저를 위해해야한다는 말입니까? – Veske

+0

컨트롤러에서 편집 작업을 수행 한 후 인스턴스 변수 (예 :'@movie = Movie.find (params [: id])')에 동영상을로드 한 다음'form_for @ movie'를 실행하십시오 – CDub

1

귀하의 MoviesController 요구, 더 나은 아직 편집 작업을

def edit 
    @movie = Movie.find(params[:id]) 
end 

또는에서 영화를 설정 코드를 건조하고 편안한 루트에 대한 당신을 위해 그것을 설정하는 before_action을 만들 수 있습니다

before_action :set_movie, only: [:show, :edit, :update, :destroy] 

def set_movie 
    @movie = Movie.find(params[:id]) 
end 
+0

레이크 루트는 영화/1에 대한 PUT 경로를 표시하지 않습니다./다음 편집하십시오. – Veske

+0

다른 버전을 사용해 보았지만 어떤 이유로 든 여전히 경로를 만들고 싶지 않습니다 .. – Veske

+0

양식이 자동으로 처리되므로 양식을 지정할 필요가 없습니다. 영화/edit.html.erb에 대해 지금 repo에 체크인되는 내용은 – Dhaulagiri

관련 문제