パスに移動すると /genre/new、アプリケーションで次のエラーが発生します。
myapp/app/views/genre/_form.html.erb where line #1 raised:
undefined method `genres_path' for #<#<Class:0x007fdcb39edcb0>:0x007fdcb39e8080>
ただし、/genre/:id/edit に移動すると、_form.html.erb ファイルはエラーなしでレンダリングされ、レコードは問題なく更新されます。
私のnew.html.erbとedit.html.erbファイルが呼び出さ<%= render 'form' %>れ、私の_form.html.erbファイルには次のものがあります:
<%= form_for(@genre) do |f| %>
<%= f.label :title %> <br /> <%= f.text_field :title %>
<%= f.label :desc %> <br /> <%= f.text_field :desc %>
<%= f.submit %>
<% end %>
Genre_controller.rb では、「新規」および「編集」アクションは次のとおりです。
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」を検索しましたが、それが発生する場所はログだけなので、これは私のコードのタイプミスではないと確信しています。
私の推測では、Rails ルーティング システムは "genre" を "genre" に正しく複数形化しますが、form_for (または依存関係) は複数形 "genres" を作成していますが、渡されたパラメーターが空または "new" の場合のみです。
エラーが 'genres_path' 付近にあるため、routes.rb ファイルで次のさまざまな組み合わせを試しましたが、問題は解決しませんでした。
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
これを回避する方法について何か考えはありますか?
編集:私のファイルのresources :genreステートメントによって生成されたルートは次のとおりです。routes.rb
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"}