当我转到路径时: /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 路由系统正确地将“流派”复数为“流派”,但 form_for(或依赖项)正在创建复数“流派”,但仅当传递给它的参数为空或“新”时。
鉴于错误围绕“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"}