Когда я иду по пути: /genre/new
в моем приложении я получаю эту ошибку:
myapp/app/views/genre/_form.html.erb where line #1 raised:
undefined method `genres_path' for #<#<Class:0x007fdcb39edcb0>:0x007fdcb39e8080>
Однако, когда я захожу в / genre /: id / редактирую файл _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 мои действия 'new' и 'edit' следующие:
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
Я выполнил поиск в моей кодовой базе для поиска строки «жанры», и единственное место, где это происходит, - в журналах, поэтому я уверен, что это не опечатка в моем коде.
Я предполагаю, что система маршрутизации Rails правильно преобразует «жанр» в «жанр», но form_for (или зависимость) создает плюрализирующие «жанры», но только когда передаваемый ему параметр пуст или «новый».
Учитывая, что ошибка связана с 'genres_path', я попробовал различные комбинации следующих в моем файле rout.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
Есть мысли о том, как я могу обойти это?
EDIT: Вот маршруты, сгенерированные оператором 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"}