3

当我转到路径时: /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.erbedit.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"}
4

1 回答 1

3

在 new.html.erb 上尝试

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

假设您将路线设置为资源-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| %>
于 2012-03-24T20:43:27.527 回答