2012-03-24 3 views
2

내가 경로로 이동 : 그러나 때레일 3 - 복수화는 "새로운"행동에 경로/방법 오류의 원인이 아니라 "편집"에 form_for는

myapp/app/views/genre/_form.html.erb where line #1 raised: 
undefined method `genres_path' for #<#<Class:0x007fdcb39edcb0>:0x007fdcb39e8080> 

: /genre/new를 내 응용 프로그램에서이 오류를 얻을 수/genre/: id/_form.html.erb 파일 렌더러를 오류없이 편집하면 레코드가 문제없이 업데이트됩니다.

new.html.erbedit.html.erb 파일 <%= render 'form' %> 전화 내 _form.html.erb 파일이 있습니다 genre_controller.rb 내 '새'와 '편집'행동에

<%= form_for(@genre) do |f| %> 
    <%= f.label :title %> <br /> <%= f.text_field :title %> 
    <%= f.label :desc %> <br /> <%= f.text_field :desc %> 
    <%= f.submit %> 
<% end %> 

은 다음과 같습니다

def new 
    @genre = Genre.new 
    current_user.authorize! :create, @genre # cancan authorization 

    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @genre } 
    end 
    end 

    def edit 
    @genre = Genre.find(params[:id]) 
    current_user.authorize! :update, @genre # cancan authorization 
    end 

내가 ' 내 코드베이스에서 "genres"문자열에 대한 검색을 실행하면 로그에 유일한 위치가 표시되므로 내 코드에서 오타가 아닌 것입니다.

레일스 라우팅 시스템은 "장르"를 "장르"로 정확하게 다중화하지만 form_for (또는 종속성)는 복수형 "장르"를 생성하지만 매개 변수가 비어 있거나 "새로운" . 오류 감안할 때

나는 내 routes.rb 파일에 다음의 다양한 조합을 시도하지만,이 문제가 해결되지 않았다 'genres_path'주위 : 내가 일을 할 수있는 방법에

match "/genres" => "genre#index", :as => :genre 
    match "/genres/:id(.:format)" => "genre#show", :as => :genre 
    match "/genre" => "genre#index", :as => :genres 
    match "/genre/:id(.:format)" => "genre#show", :as => :genres 

어떤 생각 이 주변?

편집 : new.html.erb에

genre_index GET /genre(.:format)   {:action=>"index", :controller=>"genre"} 
      POST /genre(.:format)   {:action=>"create", :controller=>"genre"} 
    new_genre GET /genre/new(.:format)  {:action=>"new", :controller=>"genre"} 
edit_genre GET /genre/:id/edit(.:format) {:action=>"edit", :controller=>"genre"} 
     genre GET /genre/:id(.:format)  {:action=>"show", :controller=>"genre"} 
      PUT /genre/:id(.:format)  {:action=>"update", :controller=>"genre"} 
      DELETE /genre/:id(.:format)  {:action=>"destroy", :controller=>"genre"} 

답변

3

당신이 자원으로 경로 설정을 가정

<%= form_for(@genre, :url => genre_path, :method => :post) do |f| %> 

을 시도 : 여기 내 routes.rb 파일에 resources :genre 문에 의해 생성 된 경로는 - resources :genre

이 또한 edit.html.erb에서 작동하지 않습니다.

http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for

업데이트 :

이 우리가

POST /genre(.:format)   {:action=>"create", :controller=>"genre"} 

에 관심이있는 하나의 생각이

<%= form_for(@genre, :url => {:action=>"create", :controller=>"genre"}, :method => :post) do |f| %> 
+0

감사를 시도입니다. 나는 그것을 시도하고 다른 오류로 연결됩니다 : 경로 일치 {: action => "show", : controller => "genre"}. 그러나 이것은 가짜 오류입니다. 나는 그런 경로를 가지고 있습니다. "rake routes"를 실행하면 genre GET/genre/: id (. : format) {: action => "show", : controller => "genre"} 정확한 경로에 오류 메시지가 표시됩니다. . 어떤 생각이 원인이 무엇입니까? –

+1

모든 장르 경로에 대한 레이크 루트의 출력을 추가 할 수 있습니까? 또한 업데이트 된 답변 참조 - 메서드를 풋 또는 포스트로 지정하십시오. – house9

+0

맨 아래의 질문에서 경로를 확인하십시오. 두 가지 시도 : put 및 : post : methods - 이전과 같은 오류 ("no route matches ...") 또한 문서에서 본 몇 가지 사항을 시도했지만 성공하지는 못했습니다. 이것은 정말로 나를 곤란하게 만든다.당신의 도움을 주셔서 감사합니다. –