Ruby on rails 未定义的方法\u s\u路径,形式为

Ruby on rails 未定义的方法\u s\u路径,形式为,ruby-on-rails,ruby-on-rails-3,routes,mongoid,Ruby On Rails,Ruby On Rails 3,Routes,Mongoid,我知道在这方面有很多问题。我环顾四周,但我似乎没有犯我找到答案的错误 嵌套在“用户”下的“我的训练资源”表单出现错误 undefined method `workouts_path' for #<#<Class:0x007f88939c9e60>:0x007f8891527b20> 在产生错误的地方,训练控制器将执行新操作: def new @user = User.find(params[:user_id]) @workout = @user.wo

我知道在这方面有很多问题。我环顾四周,但我似乎没有犯我找到答案的错误

嵌套在“用户”下的“我的训练资源”表单出现错误

undefined method `workouts_path' for #<#<Class:0x007f88939c9e60>:0x007f8891527b20>
在产生错误的地方,训练控制器将执行新操作:

  def new
    @user = User.find(params[:user_id])
    @workout = @user.workouts.new
  end
这个训练模型的名字很奇怪。控制器是复数的。这是我的路由文件:

resources :users do 
  resources :workouts
end
以及相关的rake路由输出:

       user_workouts GET    /users/:user_id/workouts(.:format)          workouts#index
                     POST   /users/:user_id/workouts(.:format)          workouts#create
    new_user_workout GET    /users/:user_id/workouts/new(.:format)      workouts#new
   edit_user_workout GET    /users/:user_id/workouts/:id/edit(.:format) workouts#edit
        user_workout GET    /users/:user_id/workouts/:id(.:format)      workouts#show
                     PUT    /users/:user_id/workouts/:id(.:format)      workouts#update
                     DELETE /users/:user_id/workouts/:id(.:format)      workouts#destroy
也许它应该是用户训练路径,但我不知道为什么它不会自动完成

另外,我正在使用mongo/mongoid,但我不知道为什么这会有不同。我让我的控制器放置@workout,它实例化了一个我可以在服务器日志中看到的新对象:

ActionView::Template::Error (undefined method `workouts_path' for #<#<Class:0x007f8893d0a480>:0x007f8893d12cc0>):
    1: = form_for @workout do |f|
    2:  
    3:  = f.label :name, "Name (optional)"
    4:  = f.text_field :name
  app/views/workouts/_form.html.haml:1:in `_app_views_workouts__form_html_haml___787289985246055156_70112286316300'
  app/views/workouts/new.html.haml:3:in `_app_views_workouts_new_html_haml___1568138279872555052_70112285908620'


  Rendered /Users/username/.rvm/gems/ruby-2.0.0-p195/gems/actionpack-3.2.11/lib/action_dispatch/middleware/templates/rescues/_trace.erb (2.5ms)
  Rendered /Users/username/.rvm/gems/ruby-2.0.0-p195/gems/actionpack-3.2.11/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.9ms)
  Rendered /Users/username/.rvm/gems/ruby-2.0.0-p195/gems/actionpack-3.2.11/lib/action_dispatch/middleware/templates/rescues/template_error.erb within rescues/layout (12.4ms)
HERE GOES THE
#<Workout:0x007f8893da8ce8>
甚至在控制台中测试了user_instance.workouts.new,以确保它不是什么奇怪的mongo问题


想法?

由于训练路线嵌套在用户资源下,因此您希望此格式IIRC用于以下表格:


由于训练路线嵌套在用户资源下,因此您希望表单_的格式为IIRC:


在我的例子中,我的问题是嵌套控制器ExpansionController的名称是单数,其父EditionsController的名称是复数。我已将嵌套控制器名称更改为复数ExpansionController,它的路由和工作方式。

在我的情况下,我的问题是嵌套控制器ExpansionController的名称为单数,其父EditionsController的名称为复数。我已将嵌套控制器名称更改为复数ExpansionController,它的路由和它的工作方式。

将要提出一个问题,说明Rspec为什么在表单_上找不到正确的路由。当您指定:url=>*\u路径时,它会起作用,但问题是由于名称空间问题,这是一个更好的解决方案。谢谢。我想问一个问题,为什么Rspec在表格上找不到正确的路线。当您指定:url=>*\u路径时,它会起作用,但问题是由于名称空间问题,这是一个更好的解决方案。非常感谢。
ActionView::Template::Error (undefined method `workouts_path' for #<#<Class:0x007f8893d0a480>:0x007f8893d12cc0>):
    1: = form_for @workout do |f|
    2:  
    3:  = f.label :name, "Name (optional)"
    4:  = f.text_field :name
  app/views/workouts/_form.html.haml:1:in `_app_views_workouts__form_html_haml___787289985246055156_70112286316300'
  app/views/workouts/new.html.haml:3:in `_app_views_workouts_new_html_haml___1568138279872555052_70112285908620'


  Rendered /Users/username/.rvm/gems/ruby-2.0.0-p195/gems/actionpack-3.2.11/lib/action_dispatch/middleware/templates/rescues/_trace.erb (2.5ms)
  Rendered /Users/username/.rvm/gems/ruby-2.0.0-p195/gems/actionpack-3.2.11/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.9ms)
  Rendered /Users/username/.rvm/gems/ruby-2.0.0-p195/gems/actionpack-3.2.11/lib/action_dispatch/middleware/templates/rescues/template_error.erb within rescues/layout (12.4ms)
HERE GOES THE
#<Workout:0x007f8893da8ce8>
form_for [@user, @workout] do |f|