gpt4 book ai didi

ruby-on-rails-3 - Rails 3 - form_for 复数化在 "new"操作上导致路径/方法错误,但在 "edit"上没有

转载 作者:行者123 更新时间:2023-12-04 14:38:51 26 4
gpt4 key购买 nike

当我转到路径时:/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(或依赖项)正在创建复数化“流派”,但前提是传递给它的参数为空或"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"}

最佳答案

在 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| %>

关于ruby-on-rails-3 - Rails 3 - form_for 复数化在 "new"操作上导致路径/方法错误,但在 "edit"上没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9854572/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com