【问题标题】:Undefined method _s_path in form_forform_for 中未定义的方法 _s_path
【发布时间】:2013-06-11 06:33:07
【问题描述】:

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

嵌套在用户下的锻炼资源的表单出现错误

undefined method `workouts_path' for #<#<Class:0x007f88939c9e60>:0x007f8891527b20>

那个表格是:

= form_for @workout do |f|
... = f.submit

锻炼控制器的新动作(产生错误的地方):

  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

(也许它应该去 user_workouts_path,但我不知道为什么它不会自动这样做。

另外,我正在使用 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 问题。

想法?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 routes mongoid


    【解决方案1】:

    由于锻炼路线嵌套在用户资源下,您希望 form_for 使用这种格式 (IIRC):

    form_for [@user, @workout] do |f|
    

    【讨论】:

    • 关于为什么 Rspec 没有在 form_for 上找到正确路线的问题。它在您指定 :url =&gt; *_path 时起作用,但由于问题是由于命名空间引起的,这是一个更好的解决方案。谢谢。
    【解决方案2】:

    就我而言,我的问题是我的嵌套控制器 (ExpansionController) 有一个单数名称,而它的父级 (EditionsController) 有一个复数名称。我已将嵌套控制器名称更改为复数 (ExpansionsController),它的路由和它的工作原理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多